Rust 的 HashMap

在 Rust 中,HashMap 是一个从键(key)映射到值(value)的数据结构。它允许你以 O(1) 的平均时间复杂度存储、检索和删除键值对。HashMap 实现了 std::collections::HashMap 结构体,通常通过 use std::collections::HashMap; 语句引入。

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

use std::collections::HashMap;

fn main() {
    // 创建一个空的 HashMap
    let mut scores = HashMap<String, i32>::new();

    // 向 HashMap 中插入键值对
    scores.insert("Blue", 10);
    scores.insert("Yellow", 50);

    // 通过键获取值(如果键不存在,则返回 None)
    if let Some(score) = scores.get("Blue") {
        println!("Blue: {}", score);
    }

    // 更新一个已存在的键的值
    scores.insert("Blue", 25);

    // 遍历 HashMap 中的键值对
    for (key, value) in &scores {
        println!("{}: {}", key, value);
    }

    // 检查 HashMap 是否包含某个键
    if scores.contains_key("Red") {
        println!("Red is in the HashMap!");
    } else {
        println!("Red is not in the HashMap.");
    }

    // 从 HashMap 中移除一个键值对
    scores.remove("Yellow");

    // 获取 HashMap 的大小(键值对的数量)
    println!("Size of scores: {}", scores.len());
}

在这个例子中,我们创建了一个 HashMap 来存储颜色和其对应的分数。我们使用了 insert 方法来添加键值对,get 方法来获取一个键对应的值(返回 Option<V> 类型,因为键可能不存在),contains_key 方法来检查 HashMap 是否包含某个键,以及 remove 方法来删除一个键值对。我们还使用了 for 循环来遍历 HashMap 中的所有键值对,并打印它们。最后,我们使用 len 方法来获取 HashMap 的大小。

注意,HashMap 的键(Key)类型必须实现 EqHash trait,这样 Rust 才能知道如何比较键以及为它们生成哈希值。大多数标准库中的类型都自动实现了这些 trait,因此你可以直接使用它们作为 HashMap 的键。如果你需要自定义类型作为键,你需要确保为你的类型实现这些 trait。

另外,由于 HashMap 是基于哈希表的,它的元素是无序的。如果你需要有序的键值对集合,可以考虑使用 BTreeMap,它基于平衡二叉搜索树实现,并保持了元素的插入顺序。

相关推荐

  1. Rust HashMap

    2024-03-16 00:34:05       43 阅读
  2. Rust 语言 HashMap

    2024-03-16 00:34:05       42 阅读
  3. Rust 中两个 HashMap 是否相等判断问题

    2024-03-16 00:34:05       42 阅读
  4. 学习 Rust 第十四天:如何使用HashMap

    2024-03-16 00:34:05       34 阅读
  5. [rustlings]11_hashmaps

    2024-03-16 00:34:05       24 阅读
  6. Rust HashMap 特定键值元素值累加方法

    2024-03-16 00:34:05       43 阅读
  7. Rust HashMap详解及单词统计示例

    2024-03-16 00:34:05       33 阅读
  8. 30天拿下RustHashMap

    2024-03-16 00:34:05       36 阅读

最近更新

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

    2024-03-16 00:34:05       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-16 00:34:05       101 阅读
  3. 在Django里面运行非项目文件

    2024-03-16 00:34:05       82 阅读
  4. Python语言-面向对象

    2024-03-16 00:34:05       91 阅读

热门阅读

  1. 2024.3.14每日一题

    2024-03-16 00:34:05       46 阅读
  2. k8s 安全机制详解

    2024-03-16 00:34:05       35 阅读
  3. Solidity Uniswap V2 Router contract addLiquidity

    2024-03-16 00:34:05       43 阅读
  4. ZK vs FHE

    ZK vs FHE

    2024-03-16 00:34:05      41 阅读
  5. tvm android_rpc_test.py执行报错解决

    2024-03-16 00:34:05       47 阅读
  6. 智能网联汽车网络安全威胁具体

    2024-03-16 00:34:05       41 阅读
  7. Nodejs引入模块运行时报错

    2024-03-16 00:34:05       45 阅读
  8. 安卓自定义ScrollView

    2024-03-16 00:34:05       34 阅读