Rust 的 HashMap

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

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

rust 复制代码
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,它基于平衡二叉搜索树实现,并保持了元素的插入顺序。

相关推荐
IT_陈寒3 小时前
用了Proxy才发现以前的JavaScript白写了
前端·人工智能·后端
唐青枫4 小时前
别把 ArrayList 当成会自动管理内存的 List:Zig 动态数组从入门到实战
后端
鸿蒙开发4 小时前
我为 HarmonyOS 做了一个统一大模型 SDK:@hmkit/ai 正式开源
后端
猪是念来过倒4 小时前
Semaphore 与 RateLimiter:并发控制双雄详解
后端
掘金者阿豪4 小时前
异构数据同步最怕什么?不是同步慢,而是数据对不上
后端
程序员cxuan5 小时前
Claude 官方的学习教程,太强了。
人工智能·后端·程序员
老孙讲技术5 小时前
把工地遮挡和掉线接进项目部:setMessageCallback 订 alarm 与 deviceStatus
后端·物联网·音视频开发
老孙讲技术5 小时前
关店后有人进门,监控值班群却没响:用 setMessageCallback 订 human,再用 aiHuman 打开人形
后端·物联网·音视频开发
LEE5 小时前
原来 Claude Code 最厉害的工具,一行代码都不写
前端·后端
老孙讲技术5 小时前
把园区几百路摄像头收进值班台账:bindDevice 入账与 listDeviceDetailsByPage 翻页
后端·物联网·音视频开发