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

相关推荐
玩转单片机与嵌入式10 小时前
玩转边缘AI(TInyML):需要掌握的C++知识汇总!
开发语言·c++·人工智能
茉莉玫瑰花茶11 小时前
Qt 信号与槽 [ 1 ]
开发语言·数据库·qt
刀法如飞11 小时前
Go数组去重的20种实现方式,AI时代解决问题的不同思路
后端·算法·go
AI人工智能+电脑小能手12 小时前
【大白话说Java面试题】【Java基础篇】第30题:JDK动态代理和CGLIB动态代理有什么区别
java·开发语言·后端·面试·代理模式
swipe12 小时前
别再把 AI 聊天做成纯文本:从 agui 这个前后端项目,拆解“可感知工具调用”的流式 AI UI
后端·langchain·llm
GetcharZp12 小时前
GitHub 爆火!纯 Go 编写的文件同步神器 Syncthing,凭什么成为程序员的标配?
后端
hERS EOUS12 小时前
SpringBoot 使用 spring.profiles.active 来区分不同环境配置
spring boot·后端·spring
LucianaiB12 小时前
我用飞书多维表做了一个 AI 活动推荐智能体:每天自动催我别错过截止日期!
后端
张健115640964812 小时前
临界区和同一线程上锁
java·开发语言·jvm
头发够用的程序员13 小时前
C++和Python面试经典算法汇总(一)
开发语言·c++·python·算法·容器·面试