一个人的命运啊,当然要靠自我奋斗,但是也要考虑到历史的进程。|

wenli7363

园龄:3年3个月粉丝:7关注:6

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的选择

任何实现了 EqHash 特征的类型都可以用于 HashMapkey,包括:

bool (虽然很少用到,因为它只能表达两种 key)
int, uint 以及它们的变体,例如 u8i32
String &str (提示: HashMapkeyString 类型时,你其实可以使用 &str 配合 get 方法进行查询
需要注意的是,f32f64 并没有实现 Hash,原因是 浮点数精度 的问题会导致它们无法进行相等比较。

如果一个集合类型的所有字段都实现了 Eq Hash,那该集合类型会自动实现EqHash。例如 Vect<T> 要实现 Hash,那么首先需要 T 实现 Hash

posted @   wenli7363  阅读(179)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起