Rust哈希映射
- 定义和创建HashMap:在Rust中,HashMap允许以键值对的形式存储数据,通过导入
std::collections::HashMap
模块并使用HashMap::new()
创建。 - HashMap基本操作:HashMap支持添加(
insert()
)、访问(get()
)、删除(remove()
)和修改 元素。这些操作通过键来实现,键必须是唯一的。 - 额外的HashMap方法:除了基本操作外,HashMap还提供了其他方法,如
len()
获取长度、contains_key()
检查键是否存在、iter()
返回条目迭代器、values()
和keys()
分别返回值和键的迭代器,以及clone()
创建HashMap副本。
Rust 中的 HashMap 数据结构允许我们以 键值对 的形式存储数据。以下是 hashmap 的一些特点:
- 每个值都与一个相应的键相关联。
- 键是唯一的,而值可以重复。
- 可以使用相应的键来访问值。
在 Rust 中创建 HashMap
HashMap 是 Rust 标准集合库的一部分,因此我们必须在程序中包含 HashMap
模块以使用它。
use std::collections::HashMap;
我们可以使用 use
声明来导入 HashMap
模块。它应该位于程序的顶部。
现在,我们可以使用 HashMap
模块中的 new()
方法创建一个 hashmap。例如,
let mut info: HashMap<i32, String> = HashMap::new();
这里,
let mut info
- 声明了一个可变变量info
HashMap<i32, String>
- HashMap 的类型,其中键是整数,值是字符串HashMap::new()
- 创建一个新的 HashMap
示例:创建一个 HashMap
// 从 Rust 标准集合库中导入 HashMap
use std::collections::HashMap;
fn main() {
// 创建一个新的 HashMap
let mut info: HashMap<i32, String> = HashMap::new();
println!("HashMap = {:?}", info);
}
输出
HashMap = {}
在这里,我们创建了一个空的 HashMap 并将其打印到屏幕上。
注意: 我们在 println!
宏中使用 :?
来打印 HashMap。
Rust 中的 HashMap 操作
HashMap
模块提供了各种方法来执行 hashmap 中的基本操作。
- 添加元素
- 访问值
- 删除元素
- 更改元素
1. 在 Rust 中向 HashMap 添加元素
我们可以使用 insert()
方法向 hashmap 中添加元素(键值对)。例如,
let mut fruits: HashMap<i32, String> = HashMap::new();
// 向 hashmap 中插入元素
fruits.insert(1, String::from("Apple"));
fruits.insert(2, String::from("Banana"));
这里,我们在绑定到变量 fruits
的 HashMap
中插入了两个键值对。这里的 String::from()
方法创建了一个 String
类型的值。
注意: 由于 mut
变量声明,才可能向 HashMap 添加新的键值对。
示例:向 HashMap 添加元素
use std::collections::HashMap;
fn main() {
let mut fruits: HashMap<i32, String> = HashMap::new();
// 在 hashmap 中添加键值对
fruits.insert(1, String::from("Apple"));
fruits.insert(2, String::from("Banana"));
println!("fruits = {:?}", fruits);
}
输出
fruits = {1: "Apple", 2: "Banana"}
2. 在 Rust 中访问 HashMap 中的值
我们可以使用 get()
方法从给定的 hashmap 中访问一个值。例如,
let mut fruits: HashMap<i32, String> = HashMap::new();
fruits.insert(1, String::from("Apple"));
fruits.insert(2, String::from("Banana"));
let first_fruit = fruits.get(&1);
这里,我们使用键 &1
和 get()
方法从 hashmap 中获取一个值。
我们使用与键(&1
)一起的和号(&
)作为参数,因为 get()
方法返回的是值的引用,而不是 HashMap 中的实际值。
示例:在 HashMap 中访问值
use std::collections::HashMap;
fn main() {
let mut fruits: HashMap<i32, String> = HashMap::new();
// 在 hashmap 中插入元素
fruits.insert(1, String::from("Apple"));
fruits.insert(2, String::from("Banana"));
// 在 hashmap 中访问值
let first_fruit = fruits.get(&1);
let second_fruit = fruits.get(&2);
let third_fruit = fruits.get(&3);
println!("第一个水果 = {:?}", first_fruit);
println!("第二个水果 = {:?}", second_fruit);
println!("第三个水果 = {:?}", third_fruit);
}
输出
第一个水果 = Some("Apple")
第二个水果 = Some("Banana")
第三个水果 = None
注意,我们使用与键(&1
、&2
)一起的和号(&
)作为 get()
方法的参数。
let first_fruit = fruits.get(&1);
let second_fruit = fruits.get(&2);
get()
方法的输出是一个 Option
枚举,这意味着如果作为参数传递的键匹配,则返回 Some
值,如果不匹配,则返回 None
。
在上述示例中,let third_fruit = fruits.get(&3)
返回 None
,因为键 &3
在 hashmap 中没有匹配的项。
3. 在 Rust 中从 HashMap 中移除元素
我们可以通过向 remove()
方法提供一个键来从 hashmap 中移除元素。例如,
let mut fruits: HashMap<i32, String> = HashMap::new();
fruits.insert(1, String::from("Apple"));
fruits.insert(2, String::from("Banana"));
fruits.remove(&1);
这里,我们使用键和 remove()
方法从 hashmap 中移除一个值。
示例:在 HashMap 中移除元素
use std::collections::HashMap;
fn main() {
let mut fruits: HashMap<i32, String> = HashMap::new();
// 在 hashmap 中插入值
fruits.insert(1, String::from("Apple"));
fruits.insert(2, String::from("Banana"));
println!("移除操作前的 fruits = {:?}", fruits);
// 在 hashmap 中移除值
fruits.remove(&1);
println!("移除操作后的 fruits = {:?}", fruits);
}
输出
fruits before remove operation = {1: "Apple", 2: "Banana"}
fruits after remove operation = {2: "Banana"}
这里,我们使用 remove()
方法在哈希图中移除键为 &1
的元素。
4. 在 Rust 中更改 HashMap 的元素
我们可以使用 insert()
方法来更改/更新哈希图中的元素。例如,
let mut fruits: HashMap<i32, String> = HashMap::new();
// 在哈希图中插入值
fruits.insert(1, String::from("Apple"));
fruits.insert(2, String::from("Banana"));
// 更新键为 1 的元素的值
fruits.insert(1, String::from("Mango"));
这里,最后一次 insert
表达式更新了键为 1 的元素的初始值。
示例:更改 HashMap 的 元素
use std::collections::HashMap;
fn main() {
let mut fruits: HashMap<i32, String> = HashMap::new();
// 在哈希图中插入值
fruits.insert(1, String::from("Apple"));
fruits.insert(2, String::from("Banana"));
println!("更新前 = {:?}", fruits);
// 更改键为 1 的哈希图值
fruits.insert(1, String::from("Mango"));
println!("更新后 = {:?}", fruits);
}
输出
更新前 = {1: "Apple", 2: "Banana"}
更新后 = {1: "Mango", 2: "Banana"}
Rust HashMap 的其他方法
除了基本方法外,这里还有一些常用的 HashMap 方法。
方法 | 描述 |
---|---|
len() | 返回 HashMap 的长度。 |
contains_key() | 检查指定键是否存在值。 |
iter() | 返回 HashMap 条目的迭代器。 |
values() | 返回 HashMap 值的迭代器。 |
keys() | 返回 HashMap 键的迭代器。 |
clone() | 创建并返回 HashMap 的副本。 |
示例:Rust HashMap 方法
use std::collections::HashMap;
fn main() {
let mut fruits: HashMap<i32, String> = HashMap::new();
fruits.insert(1, String::from("Apple"));
fruits.insert(2, String::from("Banana"));
// 使用 values() 方法循环并打印哈希图的值
for fruit in fruits.values() {
println!("{}", fruit)
}
// 使用 len() 方法打印哈希图的长度
println!("fruits 的长度 = {}", fruits.len());
}
输出
Apple
Banana
fruits 的长度 = 2
这里,我们使用 HashMap 的 values()
方法遍历其值,并使用 len()
方法找出哈希图的长度。