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
相关推荐
中屹指纹浏览器2 分钟前
2026WebGL2着色器浮点精度与帧缓存像素指纹溯源及内核渲染层差异化改造详解
经验分享·笔记
txh05076 分钟前
串口数据调试-直观表示
嵌入式硬件·学习
YunQuality8 分钟前
老牌连接器大厂盛凌电子启动QMS数字化升级:制造企业的质量内卷,终于不靠“人盯人”了
笔记·制造·职场·工业软件
Lucky_ldy9 分钟前
51单片机的学习下(结合中科协的个人自用笔记)
笔记·学习·51单片机
Pocker_Spades_A12 分钟前
[鸿蒙PC命令行移植适配]移植rust三方库erdtree到鸿蒙PC的完整实践
华为·rust·harmonyos
OBiO201317 分钟前
AAV在肠道研究中的应用:从血清型选择到炎症性肠病研究案例解析
学习
禁默17 分钟前
[鸿蒙PC命令行移植适配]移植rust三方库starship到鸿蒙PC的完整实践
华为·rust·harmonyos
段一凡-华北理工大学17 分钟前
工业领域的Hadoop架构学习~系列文章16:实时流处理架构 - 工业数据的实时动脉
大数据·数据仓库·hadoop·分布式·学习·架构·高炉炼铁
MartinYeung517 分钟前
[论文学习]隐私保护联邦学习于入侵侦测系统之调查研究
学习
钟灵92130 分钟前
C++【模板初阶】
开发语言·c++·笔记·c#