在Rust 中,HashMap 是一种键值对存储的集合类型,它提供了高效的插入、查找和删除操作。
键值对的形式存储数据,一个键(Key)对应一个值(Value);
Hash 函数:决定如何在内存中存放K和V;
fn main() {
let mut map:HashMap<String,String> = HashMap::new();
}
fn main() {
let mut map:HashMap<String,String> = HashMap::new();
map.insert("name".to_string(), "test".to_string());
}
在元素类型为 Tuple 的 Vector 上使用 collect方法,可以组建一个 HashMap:
要求 Tuple 有两个值:一个作为K,一个作为V;
collect方法可以把数据整合成很多种集合类型,包括HashMap;
返回值需要显式指明类型;
将2个集合转换为一个 map 的示例 :
fn main() {
let name:Vec<String> = vec!["John".to_string(),"Mary".to_string(),"Bob".to_string()];
let age:Vec<i32> = vec![25,30,28];
let mut map:HashMap<String,i32> = HashMap::new();
for i in 0..name.len(){
map.insert(name[i].clone(),age[i]);
}
println!("{:?}",map);
let map2:HashMap<_, _> = name.iter().zip(age.iter()).collect();
println!("{:?}",map2);
}
1. 对于实现了 Copy trait 的类型(例如i32),值会被复制到 HashMap中
2. 对于拥有所有权的值(例如String),值会被移动,所有权会转移给HashMap
视图 get() 函数获取 hashMap 的值,传递一个键( 是一个引用 & )
fn main() {
let name:HashMap<i32, String> = HashMap::from([
(1, "John".to_string()),
(2, "Jane".to_string()),
(3, "Jim".to_string())
]);
println!("{:?}", name.get(&1));
}
如果向 HashMap 插入一对键值,然后再插入同样的Key,但是不同的 Value,那么原来的 Value 会被替换掉:
fn main() {
let mut names:HashMap<i32, String> = HashMap::from([
(1, "John".to_string()),
(2, "Jane".to_string()),
(3, "Jim".to_string())
]);
names.insert(3, "Joe".to_string());
let name = names.get(&3);
match name {
Some(n) => println!("Name: {}", n),
None => println!("No such name!")
}
}
fn main() {
let mut names:HashMap<i32, String> = HashMap::from([
(1, "John".to_string()),
(2, "Jane".to_string()),
(3, "Jim".to_string())
]);
// 删除 k
names.remove(&2);
let name = names.get(&2);
match name {
Some(n) => println!("Name: {}", n),
None => println!("No such name!")
}
}