Rust学习笔记_17——HashMap

Rust学习笔记_14------结构体
Rust学习笔记_15------Union
Rust学习笔记_16------Vector


HashMap

文章目录

    • HashMap
      • [1. 创建](#1. 创建)
      • [2. 插入数据](#2. 插入数据)
      • [3. 访问](#3. 访问)
      • [4. 更新](#4. 更新)
      • [5. 遍历](#5. 遍历)
      • [6. 移除](#6. 移除)
      • [7. 注意](#7. 注意)
      • [8. 示例](#8. 示例)

Rust 中的 HashMap 是一种非常有用的数据结构,它允许你存储键值对(key-value pairs),并且可以在常数时间内(O(1) 平均时间复杂度)根据键来查找对应的值。

HashMap 是 Rust 标准库的一部分,位于 std::collections 模块中。

1. 创建

rust 复制代码
// 引入HashMap类型
use std::collections::HashMap;

//创建HashMap实例
let mut map: HashMap<String, i32> = HashMap::new();

2. 插入数据

使用insert方法向HashMap中插入键值对

rust 复制代码
map.insert(String::from("one"), 1);
map.insert(String::from("two"), 2);
map.insert(String::from("three"), 3);

3. 访问

使用 get 方法可以根据键来访问对应的值。

get 方法返回一个 Option<&V> 类型的值,这反映了 Rust 的所有权系统和可能的键不存在的情况

rust 复制代码
let value = map.get(&String::from("one"));
match value {
    Some(v) => println!("Found value: {}", v),
    None => println!("Key not found"),
}

4. 更新

entry方法提供了一种更高效的方式来更新 HashMap 中的值,因为它避免了多次哈希查找。

entry 方法返回一个 Entry 枚举,它有两个变体:OccupiedVacant

rust 复制代码
match map.entry(String::from("one")) {
    Entry::Occupied(e) => {
        e.into_mut().push(1); // 假设值是 Vec<i32> 类型,更新值
    }
    Entry::Vacant(e) => {
        e.insert(1); // 插入新值
    }
}

5. 遍历

使用迭代器来遍历HashMap中的键值对

rust 复制代码
for (key, value) in &map {
    println!("Key: {}, Value: {}", key, value);
}

6. 移除

rust 复制代码
map.remove(&String::from("two"));

7. 注意

HashMap 的键必须实现 EqHash trait,因为 HashMap 需要根据键的哈希值来存储和查找值。

默认情况下,Rust 的标准库类型如 Stringi32 等已经实现了这些 trait。

8. 示例

rust 复制代码
use std::collections::HashMap;

fn main() {
    let mut map: HashMap<String, i32> = HashMap::new();

    // 插入键值对
    map.insert(String::from("one"), 1);
    map.insert(String::from("two"), 2);
    map.insert(String::from("three"), 3);

    // 访问值
    match map.get(&String::from("one")) {
        Some(v) => println!("Found value: {}", v),
        None => println!("Key not found"),
    }

    // 更新值
    map.entry(String::from("two")).or_insert(50); // 如果键不存在,则插入 50
相关推荐
执笔论英雄3 小时前
【大模型学习cuda】入们第一个例子-向量和
学习
wdfk_prog3 小时前
[Linux]学习笔记系列 -- [drivers][input]input
linux·笔记·学习
ouliten4 小时前
cuda编程笔记(36)-- 应用Tensor Core加速矩阵乘法
笔记·cuda
孞㐑¥4 小时前
算法——BFS
开发语言·c++·经验分享·笔记·算法
Gary Studio6 小时前
rk芯片驱动编写
linux·学习
mango_mangojuice6 小时前
Linux学习笔记(make/Makefile)1.23
java·linux·前端·笔记·学习
工程师老罗6 小时前
YOLOv1 核心知识点笔记
笔记·yolo
lingggggaaaa6 小时前
安全工具篇&动态绕过&DumpLsass凭据&Certutil下载&变异替换&打乱源头特征
学习·安全·web安全·免杀对抗
PP东6 小时前
Flowable学习(二)——Flowable概念学习
java·后端·学习·flowable
学电子她就能回来吗6 小时前
深度学习速成:损失函数与反向传播
人工智能·深度学习·学习·计算机视觉·github