2022年03月29日 日更 90 / 100 天
昨天学到 字符串新建与更新的语法。本日来学习哈希表。哈希、map、工具、哈希表或者关联数组哈希 map 可以用于须要任何类型作为键来探求数据的情形,而不是像 vector 那样通过索引
01新建一个哈希表
use std::collections::HashMap;let mut scores = HashMap::new();scores.insert(String::from("Blue"), 10);scores.insert(String::from("Yellow"), 50);// 利用 vector 创建哈希use std::collections::HashMap;let teams = vec![String::from("Blue"), String::from("Yellow")];let initial_scores = vec![10, 50];let scores: HashMap<_, _> = teams.iter().zip(initial_scores.iter()).collect();
02
哈希 Map 和所有权。在把有所有权的值(String)写入 map 时,这些值便不能再利用
use std::collections::HashMap;let field_name = String::from("Favorite color");let field_value = String::from("Blue");let mut map = HashMap::new();map.insert(field_name, field_value);// 之后再访问 file_name / field_value 便会出问题
03
访问哈希 map 中的值
use std::collections::HashMap;let mut scores = HashMap::new();scores.insert(String::from("Blue"), 10);scores.insert(String::from("Yellow"), 50);let team_name = String::from("Blue");let score = scores.get(&team_name); // get() 方法访问for (key, value) in &scores { // for 循环遍历 println!("{}:{}", key, value);}
04
更新哈希 map
覆盖一个值use std::collections::HashMap;let mut scores = HashMap::new();scores.insert(String::from("Blue"), 10);scores.insert(String::from("Blue"), 50);println!("{:?}", scores); // 打印 {"Blue", 50}
只在键不存在时插入
use std::collections::HashMap;let mut scores = HashMap::new();scores.insert(String::from("Blue"), 10);scores.entry(String::from("Yellow")).or_insert(50);scores.entry(String::from("Blue")).or_insert(50);println!("{:?}", scores); // 打印 {"Yellow": 50, "Blue": 10}
根据旧值更新一个值
use std::collections::HashMap;let text = "hello world wonderfull world";let mut map = HashMap::new();for word in text.split_whitespace() {let count = map.entry(word).or_insert(0); count += 1;}println!("{:?}", map); // 打印 {"world": 2, "hello": 1, "wonderful": 1}
总结
利用哈希表存储键值对,Rust 跟 PHP 比较,的确 PHP 很灵巧。Rust 的这些看着很头大。
上一篇:Rust 头铁之路 | 一次周回顾周复盘
我是【明哥我来】,你的点赞关注,便是我的提高动力。