Rust 中的 HashMap
最编程
2024-03-27 07:08:21
...
HashMap
在 Rust 中是一个非常常用且强大的数据结构,它允许你存储键值对(key-value pairs),并且能够快速地基于键检索值。
下面是使用 HashMap
的一些基本示例:
首先,你需要在你的文件中引入 HashMap
:
use std::collections::HashMap;
创建一个新的 HashMap
let mut map = HashMap::new();
插入元素
使用 insert
方法插入元素:
map.insert(String::from("key1"), 1);
map.insert(String::from("key2"), 2);
map.insert(String::from("key3"), 3);
注意,在上述例子中,键是 String
类型,值是 i32
类型。在实际使用中,你可以使用任何实现了适当 trait(例如 Eq
和 Hash
对于键)的类型。
检索元素
使用 get
方法检索元素:
let value = map.get(&String::from("key1"));
match value {
Some(v) => println!("Found value: {}", v),
None => println!("No value found"),
}
或者更简洁地,使用 if let
语法:
if let Some(v) = map.get(&String::from("key1")) {
println!("Found value: {}", v);
} else {
println!("No value found");
}
遍历 HashMap
你可以使用 for
循环遍历 HashMap 中的键值对:
for (key, value) in &map {
println!("{}: {}", key, value);
}
更新 HashMap 中的值
如果键已经存在,insert
方法会覆盖旧的值。如果你只想在键不存在时插入新值,可以使用 entry
方法:
match map.entry(String::from("key1")) {
std::collections::hash_map::Entry::Occupied(mut entry) => {
// 修改现有值
*entry.get_mut() = 4;
},
std::collections::hash_map::Entry::Vacant(entry) => {
// 插入新值
entry.insert(1);
},
}
或者使用更简洁的 or_insert
方法:
*map.entry(String::from("key1")).or_insert(1) = 4; // 如果 "key1" 存在,将其值设置为 4;否则,插入 (key1, 1) 但随后立即将其值更改为 4(这可能不是你想要的,因此请谨慎使用此简洁形式)。
通常你可能想要这样做:
if !map.contains_key(&String::from("key1")) {
map.insert(String::from("key1"), 1);
} else {
// 如果需要的话,处理已经存在键的情况。
}
或者,更优雅地使用 entry
方法:
map.entry(String::from("key1")).or_insert_with(|| {
// 仅在键不存在时计算并插入新值。这里的闭包返回要插入的值。
1 // 例如,这里返回1作为新值。实际上,你可以执行任何复杂的计算或逻辑来生成这个值。
});
在这个例子中,or_insert_with
方法允许你指定一个闭包,该闭包在键不存在时被调用以生成要插入的值。这对于需要复杂计算或避免不必要计算的情况非常有用。如果键已经存在,则不会调用闭包。
推荐阅读
-
自我实现的生活》第 10 期第 26 节 "感恩的奇迹 "中的经典语录。
-
ICCV 2023 | 关于图像复原任务中的扩散模型扩散的论文:超分割、复原、增强、去模糊、去阴影
-
自我实现》第十期第 23 节 "欣赏与感恩 "中的经典语录。
-
删除系统中多余的财务和贸易数据
-
深入探讨 CSS 中的渐变艺术:线性渐变、径向渐变和锥形渐变细节-1。线性渐变(线性渐变)
-
Rendezvous CRM 系统中的 SQL 注入漏洞 [2023-HW]-I.产品描述
-
[MySQL] MySQL中的原子更新操作:如何模拟 MongoDB 的 "find_one_and_update
-
C++ 医学影像 PACS】CT 检查中的三维重建技术
-
C++医学影像 PACS】CT 检查中的 3D 重建是一种怎样的检查?
-
贪婪算法在 Python、JavaScript、Java、C++ 和 C# 中的多种实现及其在硬币变化、分数骑士、活动选择和使用哈夫曼编码的最小生成树问题中的应用实例