2022年03月29日 日更 90 / 100 天

昨天学到 字符串新建与更新的语法。
本日来学习哈希表。
哈希、map、工具、哈希表或者关联数组哈希 map 可以用于须要任何类型作为键来探求数据的情形,而不是像 vector 那样通过索引

01

新建一个哈希表

php保存键值对Rust 头铁之路  哈希 map 储存键值对 CSS

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 头铁之路 | 一次周回顾周复盘

我是【明哥我来】,你的点赞关注,便是我的提高动力。