在Rust中,集合类型是非常重要的数据结构,它们提供了有效地存储和操作一组数据的能力。在《Rust 常用集合(下)》中,我们将探讨一些常用的集合类型,包括哈希映射(HashMap
)、集合(HashSet
)以及一些高级用法。
哈希映射(HashMap)
HashMap
是一种键值对的集合,允许通过键快速查找对应的值。下面是一个简单的示例,演示如何使用 HashMap
。
use std::collections::HashMap;
fn main() {
// 创建一个新的 HashMap
let mut scores = HashMap::new();
// 插入数据
scores.insert("Alice", 50);
scores.insert("Bob", 40);
scores.insert("Charlie", 75);
// 访问数据
let alice_score = scores.get("Alice").unwrap();
println!("Alice's score is: {}", alice_score);
// 遍历 HashMap
for (key, value) in &scores {
println!("{}: {}", key, value);
}
// 更新值
scores.insert("Alice", 60);
println!("Updated Alice's score to: {}", scores.get("Alice").unwrap());
}
在上面的代码中,我们创建了一个 HashMap
,并插入了几个用户的分数。可以通过 get
方法快速访问某个键对应的值,通过遍历来查看所有的键值对。值得注意的是,HashMap
是无序的。
集合(HashSet)
HashSet
是类似于 HashMap
的另一种集合类型,主要用于存储唯一的值。它不允许重复的元素,非常适合用于去重场景。以下是 HashSet
的示例。
use std::collections::HashSet;
fn main() {
// 创建一个新的 HashSet
let mut unique_numbers = HashSet::new();
// 插入数据
unique_numbers.insert(1);
unique_numbers.insert(2);
unique_numbers.insert(3);
unique_numbers.insert(2); // 重复的值不会插入
// 检查某个值是否在 HashSet 中
if unique_numbers.contains(&2) {
println!("HashSet contains 2");
}
// 遍历 HashSet
for number in &unique_numbers {
println!("{}", number);
}
// 删除元素
unique_numbers.remove(&1);
println!("After removing 1: {:?}", unique_numbers);
}
在这个示例中,HashSet
用于存储唯一的数字。插入一个重复的元素不会影响集合。我们可以通过 contains
方法检查某个值是否存在,也可以通过 remove
方法删除元素。
高级特性
- 使用
Entry
API:HashMap
的Entry
API 提供了一种更优雅的方式来处理可能不存在的键。
fn main() {
let mut scores = HashMap::new();
let player = "Dave";
// 使用 Entry API 更新或插入
scores.entry(player).or_insert(0); // 插入时,如果不存在则初始化为0
*scores.entry(player).or_insert(0) += 10; // 增加分数
println!("{}'s score: {}", player, scores.get(player).unwrap());
}
- 集合运算:我们可以对
HashSet
进行并集、交集等操作。
fn main() {
let mut set_a: HashSet<_> = [1, 2, 3].iter().cloned().collect();
let set_b: HashSet<_> = [2, 3, 4].iter().cloned().collect();
// 交集
let intersection: HashSet<_> = set_a.intersection(&set_b).cloned().collect();
println!("Intersection: {:?}", intersection);
}
总之,Rust 提供了强大的集合类型,使得我们能够有效地处理数据。无论是简单的 HashMap
和 HashSet
,还是更复杂的运算和 API,Rust 的集合类型都能满足我们的需求。在实际开发中,合理选择和使用这些集合类型,可以大大提高代码的效率和可读性。