欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > Rust学习笔记_17——HashMap

Rust学习笔记_17——HashMap

2026/3/3 22:04:52 来源:https://blog.csdn.net/LuckyLay/article/details/144334411  浏览:    关键词:Rust学习笔记_17——HashMap

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


HashMap

文章目录

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


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

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

1. 创建

// 引入HashMap类型
use std::collections::HashMap;//创建HashMap实例
let mut map: HashMap<String, i32> = HashMap::new();

2. 插入数据

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

map.insert(String::from("one"), 1);
map.insert(String::from("two"), 2);
map.insert(String::from("three"), 3);

3. 访问

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

get 方法返回一个 Option<&V> 类型的值,这反映了 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

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

5. 遍历

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

for (key, value) in &map {println!("Key: {}, Value: {}", key, value);
}

6. 移除

map.remove(&String::from("two"));

7. 注意

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

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

8. 示例

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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词