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 提供了多种方法来插入、查找、删除和迭代元素。理解这些方法并熟练使用它们,可以帮助我们高效地处理和操作关联数据。

posted @   代码世界faq  阅读(33)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示