Rust 语言的 HashMap

HashMap 在 Rust 中是一个非常常用且强大的数据结构,它允许你存储键值对(key-value pairs),并且能够快速地基于键检索值。

下面是使用 HashMap 的一些基本示例:

首先,你需要在你的文件中引入 HashMap

use std::collections::HashMap;

创建一个新的 HashMap

let mut map = HashMap::new();

插入元素

使用 insert 方法插入元素:

map.insert(String::from("key1"), 1);
map.insert(String::from("key2"), 2);
map.insert(String::from("key3"), 3);

注意,在上述例子中,键是 String 类型,值是 i32 类型。在实际使用中,你可以使用任何实现了适当 trait(例如 EqHash 对于键)的类型。

检索元素

使用 get 方法检索元素:

let value = map.get(&String::from("key1"));
match value {
    Some(v) => println!("Found value: {}", v),
    None => println!("No value found"),
}

或者更简洁地,使用 if let 语法:

if let Some(v) = map.get(&String::from("key1")) {
    println!("Found value: {}", v);
} else {
    println!("No value found");
}

遍历 HashMap

你可以使用 for 循环遍历 HashMap 中的键值对:

for (key, value) in &map {
    println!("{}: {}", key, value);
}

更新 HashMap 中的值

如果键已经存在,insert 方法会覆盖旧的值。如果你只想在键不存在时插入新值,可以使用 entry 方法:

match map.entry(String::from("key1")) {
    std::collections::hash_map::Entry::Occupied(mut entry) => {
        // 修改现有值
        *entry.get_mut() = 4;
    },
    std::collections::hash_map::Entry::Vacant(entry) => {
        // 插入新值
        entry.insert(1);
    },
}

或者使用更简洁的 or_insert 方法:

*map.entry(String::from("key1")).or_insert(1) = 4; // 如果 "key1" 存在,将其值设置为 4;否则,插入 (key1, 1) 但随后立即将其值更改为 4(这可能不是你想要的,因此请谨慎使用此简洁形式)。

通常你可能想要这样做:

if !map.contains_key(&String::from("key1")) {
    map.insert(String::from("key1"), 1);
} else {
    // 如果需要的话,处理已经存在键的情况。
}

或者,更优雅地使用 entry 方法:

map.entry(String::from("key1")).or_insert_with(|| {
    // 仅在键不存在时计算并插入新值。这里的闭包返回要插入的值。
    1 // 例如,这里返回1作为新值。实际上,你可以执行任何复杂的计算或逻辑来生成这个值。
});

在这个例子中,or_insert_with 方法允许你指定一个闭包,该闭包在键不存在时被调用以生成要插入的值。这对于需要复杂计算或避免不必要计算的情况非常有用。如果键已经存在,则不会调用闭包。

相关推荐

  1. Rust 语言 HashMap

    2024-03-23 05:08:09       43 阅读
  2. Rust HashMap

    2024-03-23 05:08:09       43 阅读
  3. Rust 中两个 HashMap 是否相等判断问题

    2024-03-23 05:08:09       42 阅读
  4. 学习 Rust 第十四天:如何使用HashMap

    2024-03-23 05:08:09       34 阅读
  5. [rustlings]11_hashmaps

    2024-03-23 05:08:09       25 阅读
  6. Rust HashMap 特定键值元素值累加方法

    2024-03-23 05:08:09       44 阅读
  7. Rust HashMap详解及单词统计示例

    2024-03-23 05:08:09       33 阅读
  8. 30天拿下RustHashMap

    2024-03-23 05:08:09       36 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-23 05:08:09       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-23 05:08:09       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-23 05:08:09       87 阅读
  4. Python语言-面向对象

    2024-03-23 05:08:09       96 阅读

热门阅读

  1. Docker

    Docker

    2024-03-23 05:08:09      40 阅读
  2. RUST: let task = &mut task.unwrap().clone();

    2024-03-23 05:08:09       46 阅读
  3. jupyter | jupyter使用conda虚拟环境

    2024-03-23 05:08:09       42 阅读
  4. docker常用命令(不断更新)

    2024-03-23 05:08:09       38 阅读
  5. c语言教务成绩管理系统1000+

    2024-03-23 05:08:09       41 阅读
  6. mac 同步安卓手机屏幕

    2024-03-23 05:08:09       41 阅读
  7. 58.最后一个单词的长度

    2024-03-23 05:08:09       39 阅读
  8. 【力扣】387. 字符串中的第一个唯一字符

    2024-03-23 05:08:09       44 阅读
  9. 机器学习流程—数据分布不均处理

    2024-03-23 05:08:09       42 阅读
  10. 机器学习概念

    2024-03-23 05:08:09       40 阅读
  11. 作为前端,如何利用机器学习

    2024-03-23 05:08:09       36 阅读
  12. C语言 getchar()原理及易错点解析

    2024-03-23 05:08:09       38 阅读