rust 更新HashMap
在更新HashMap的时候,有以下几个常见的情况
fn main() { use std::collections::HashMap; let mut scores = HashMap::new(); scores.insert("Blue", 10); // 覆盖已有的值,返回一个Option类型,返回旧的值 let old = scores.insert("Blue", 20); assert_eq!(old, Some(10)); // 查询新插入的值,通过键查询值,返回一个Option类型,但是是引用 let new = scores.get("Blue"); assert_eq!(new, Some(&20)); // 查询Yellow对应的值,若不存在则插入新值 let v = scores.entry("Yellow").or_insert(5); assert_eq!(*v, 5); // 不存在,插入5 // 查询Yellow对应的值,若不存在则插入新值 let v = scores.entry("Yellow").or_insert(50); assert_eq!(*v, 5); // 已经存在,因此50没有插入 }
2 关于key的选择
任何实现了 Eq
和 Hash
特征的类型都可以用于 HashMap
的 key
,包括:
bool
(虽然很少用到,因为它只能表达两种 key)
int
, uint
以及它们的变体,例如 u8
、i32
等
String
和 &str
(提示: HashMap
的 key
是 String
类型时,你其实可以使用 &str
配合 get
方法进行查询
需要注意的是,f32
和 f64
并没有实现 Hash
,原因是 浮点数精度 的问题会导致它们无法进行相等比较。
如果一个集合类型的所有字段都实现了 Eq
和 Hash
,那该集合类型会自动实现Eq
和 Hash
。例如 Vect<T>
要实现 Hash
,那么首先需要 T
实现 Hash
。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步