09. rust基础-hashmaps
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
对象,允许对键的值进行检查或修改(例如,更新值或插入值)。 -
entry
方法通过提供一个 Entry 类型的值,允许你根据键是否已存在于哈希表中,灵活地插入、更新或修改值。 -
Entry
类型有两个常用的方法:or_insert
: 如果键存在,返回该键对应的值的可变引用。如果不存在,则插入一个默认值并返回该值的可变引用。and_modify
: 如果键已经存在,修改其值。如果键不存在,则不做任何操作。
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
提供了多种方法来插入、查找、删除和迭代元素。理解这些方法并熟练使用它们,可以帮助我们高效地处理和操作关联数据。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】