Rust学习笔记_17——HashMap

Rust学习笔记_14------结构体
Rust学习笔记_15------Union
Rust学习笔记_16------Vector


HashMap

文章目录

    • HashMap
      • [1. 创建](#1. 创建)
      • [2. 插入数据](#2. 插入数据)
      • [3. 访问](#3. 访问)
      • [4. 更新](#4. 更新)
      • [5. 遍历](#5. 遍历)
      • [6. 移除](#6. 移除)
      • [7. 注意](#7. 注意)
      • [8. 示例](#8. 示例)

Rust 中的 HashMap 是一种非常有用的数据结构,它允许你存储键值对(key-value pairs),并且可以在常数时间内(O(1) 平均时间复杂度)根据键来查找对应的值。

HashMap 是 Rust 标准库的一部分,位于 std::collections 模块中。

1. 创建

rust 复制代码
// 引入HashMap类型
use std::collections::HashMap;

//创建HashMap实例
let mut map: HashMap<String, i32> = HashMap::new();

2. 插入数据

使用insert方法向HashMap中插入键值对

rust 复制代码
map.insert(String::from("one"), 1);
map.insert(String::from("two"), 2);
map.insert(String::from("three"), 3);

3. 访问

使用 get 方法可以根据键来访问对应的值。

get 方法返回一个 Option<&V> 类型的值,这反映了 Rust 的所有权系统和可能的键不存在的情况

rust 复制代码
let value = map.get(&String::from("one"));
match value {
    Some(v) => println!("Found value: {}", v),
    None => println!("Key not found"),
}

4. 更新

entry方法提供了一种更高效的方式来更新 HashMap 中的值,因为它避免了多次哈希查找。

entry 方法返回一个 Entry 枚举,它有两个变体:OccupiedVacant

rust 复制代码
match map.entry(String::from("one")) {
    Entry::Occupied(e) => {
        e.into_mut().push(1); // 假设值是 Vec<i32> 类型,更新值
    }
    Entry::Vacant(e) => {
        e.insert(1); // 插入新值
    }
}

5. 遍历

使用迭代器来遍历HashMap中的键值对

rust 复制代码
for (key, value) in &map {
    println!("Key: {}, Value: {}", key, value);
}

6. 移除

rust 复制代码
map.remove(&String::from("two"));

7. 注意

HashMap 的键必须实现 EqHash trait,因为 HashMap 需要根据键的哈希值来存储和查找值。

默认情况下,Rust 的标准库类型如 Stringi32 等已经实现了这些 trait。

8. 示例

rust 复制代码
use std::collections::HashMap;

fn main() {
    let mut map: HashMap<String, i32> = HashMap::new();

    // 插入键值对
    map.insert(String::from("one"), 1);
    map.insert(String::from("two"), 2);
    map.insert(String::from("three"), 3);

    // 访问值
    match map.get(&String::from("one")) {
        Some(v) => println!("Found value: {}", v),
        None => println!("Key not found"),
    }

    // 更新值
    map.entry(String::from("two")).or_insert(50); // 如果键不存在,则插入 50
相关推荐
汤姆和佩琦2 分钟前
LLMs基础学习(八)强化学习专题(1)
深度学习·学习·强化学习·马尔可夫决策过程
Kapaseker34 分钟前
Android程序员初学Rust-通道
后端·rust
代码小将1 小时前
java中static学习笔记
java·笔记·学习
虾球xz1 小时前
CppCon 2015 学习:Reactive Stream Processing in Industrial IoT using DDS and Rx
开发语言·c++·物联网·学习
我是前端小学生1 小时前
如何在macos上安装rust开发环境
rust
UestcXiye1 小时前
Rust 学习笔记:关于共享状态并发的练习题
rust
Y3174292 小时前
python Day46 学习(日志Day15复习)
python·学习·机器学习
学不会就看2 小时前
selenium学习实战【Python爬虫】
python·学习·selenium
CIb0la2 小时前
Ai自动补全编程工具:llama vscode
运维·开发语言·学习·测试工具·程序人生
2301_804774492 小时前
回溯算法学习
学习