導(dǎo)入庫(kù)
use std::collections::HashMap;
使用
let mut scores = HashMap::new();
scores.insert("bad".to_string(), 10);
scores.insert("googd".to_string(), 100);
println!("scores = {:#?}", scores);
vector 和 hashmap 數(shù)據(jù)都在堆上
用隊(duì)伍列表和分?jǐn)?shù)列表創(chuàng)建哈希 map
let teams = vec!["blue".to_string(), "red".to_string()];
let scores = vec![10, 50];
let res: HashMap<_, _> = teams.iter().zip(scores.iter()).collect();
println!("res = {:#?}", res);
哈希 map 和所有權(quán)
對(duì)于像 i32 這樣的實(shí)現(xiàn)了 Copy trait 的類型,其值可以拷貝進(jìn)哈希 map。對(duì)于像 String 這樣擁有所有權(quán)的值,其值將被移動(dòng)而哈希 map 會(huì)成為這些值的所有者
let s1 = "hello".to_string();
let s2 = "world".to_string();
let mut map = HashMap::new();
map.insert(s1, s2);
// println!("s1 = {}, s2= {}", s1, s2); 被借用
println!("map = {:#?}", map);
訪問(wèn)哈希 map 中的值
let mut res = HashMap::new();
res.insert("good".to_string(), 100);
res.insert("bad".to_string(), 10);
let k = "good".to_string();
let v = res.get(&k);
match v {
Some(value) => println!("value = {}", value),
None => println!("none"),
}
for (key, value) in &res {
println!("{}: {}", key, value);
}
只在鍵沒(méi)有對(duì)應(yīng)值時(shí)插入
let mut scores = HashMap::new();
scores.insert("b".to_string(), 100);
scores.entry("b".to_string()).or_insert(10);
scores.entry("r".to_string()).or_insert(90);
println!("scores = {:#?}", scores);
根據(jù)舊值更新一個(gè)值
let text = "hello world wonderful world";
let mut map = HashMap::new();
for word in text.split_whitespace() {
let count = map.entry(word).or_insert(0);
*count += 1;
}
println!("map = {:#?}", map);