HashMap 是 Rust 标准库中提供的一个哈希表实现,属于 std::collections 模块。它以键值对的形式存储数据,其中键是唯一的,每个键对应一个值。它通常用于存储不重复的值,并能够根据键快速访问值。
HashMap 提供了许多方法来方便地操作数据,下面是对 HashMap 的详细学习,包括常用方法及其用途。
1. 创建一个 HashMap
use std::collections::HashMap;
let mut map = HashMap::new(); // 创建一个空的 HashMap
// 插入数据
map.insert("apple", 3);
map.insert("banana", 2);
2. 常用方法
2.1 插入和更新元素
-
insert(key, value):插入一个键值对。如果键已经存在,它会覆盖原来的值。map.insert("orange", 5); // 添加键值对 ("orange", 5) -
entry(key):返回一个Entry对象,允许对键的值进行检查或修改(例如,更新值或插入值)。map.entry("apple").or_insert(0); // 如果 "apple" 不存在,则插入 (key: "apple", value: 0)
2.2 访问元素
-
get(key):获取键对应的值的引用。如果键不存在,返回None。let apple = map.get("apple"); // Some(3) -
get_mut(key):获取键对应的值的可变引用。如果键不存在,返回None。if let Some(v) = map.get_mut("banana") { *v = 4; // 更新值 }
2.3 删除元素
-
remove(key):根据键删除元素,并返回被删除值的Option。let removed = map.remove("banana"); // Some(2) -
clear():删除HashMap中的所有元素。map.clear(); // 清空 HashMap
2.4 查询
-
contains_key(key):检查HashMap是否包含某个键。let has_apple = map.contains_key("apple"); // true -
len():返回HashMap中的元素数量。let count = map.len(); // 2 -
is_empty():检查HashMap是否为空。let is_empty = map.is_empty(); // false
2.5 迭代
-
iter():返回一个不可变的迭代器,用于遍历所有键值对。for (key, value) in map.iter() { println!("{}: {}", key, value); } -
iter_mut():返回一个可变的迭代器,用于遍历所有键值对,并允许修改值。for (key, value) in map.iter_mut() { *value += 1; // 更新每个值 } -
keys():返回HashMap中所有键的一个迭代器。for key in map.keys() { println!("{}", key); } -
values():返回HashMap中所有值的一个迭代器。for value in map.values() { println!("{}", value); } -
values_mut():返回一个可变引用迭代器,可以修改HashMap中的值。for value in map.values_mut() { *value += 1; }
2.6 合并操作
-
extend(iter):从另一个迭代器中将元素添加到HashMap。let mut other_map = HashMap::new(); other_map.insert("kiwi", 1); map.extend(other_map); -
append(other_map):将另一个HashMap的所有元素合并到当前HashMap中。let mut other_map = HashMap::new(); other_map.insert("grape", 4); map.append(&mut other_map);
3. Entry API(更细粒度的操作)
Entry API 用于处理存在/不存在键时的操作,它提供了对现有值的访问和对不存在的键值对的处理。Entry 提供了以下方法:
-
or_insert(value):如果键不存在,则插入值并返回该值的可变引用。如果键已存在,则返回该键的现有值的可变引用。let entry = map.entry("orange").or_insert(5); // 如果 "orange" 不存在,则插入 (key: "orange", value: 5) *entry += 2; // 更新值 -
and_modify():在键存在时修改其值。map.entry("apple") .and_modify(|v| *v += 1) .or_insert(5);
4. HashMap 的方法总结
| 方法 | 描述 |
|---|---|
insert(key, value) |
插入一个新的键值对,如果键存在则更新值 |
get(key) |
获取指定键的值的引用 |
get_mut(key) |
获取指定键的可变引用 |
remove(key) |
删除指定键的键值对 |
contains_key(key) |
判断 HashMap 中是否包含指定键 |
len() |
返回 HashMap 的大小 |
is_empty() |
判断 HashMap 是否为空 |
clear() |
清空 HashMap 中的所有键值对 |
iter() |
返回一个不可变的迭代器 |
iter_mut() |
返回一个可变的迭代器 |
keys() |
返回所有键的迭代器 |
values() |
返回所有值的迭代器 |
values_mut() |
返回所有值的可变迭代器 |
extend(iter) |
将另一个迭代器中的元素添加到 HashMap 中 |
entry(key) |
返回一个 Entry,允许通过更细粒度的操作来访问或修改键值对 |
总结
HashMap 是一个非常强大的数据结构,具有高效的键值对存储和查询能力。在 Rust 中,HashMap 提供了多种方法来插入、查找、删除和迭代元素。理解这些方法并熟练使用它们,可以帮助我们高效地处理和操作关联数据。
来源链接:https://www.cnblogs.com/learnForLife/p/18690932










没有回复内容