【Rust入门知识点学与练】第11课:HashMap 键值对集合

知识点:HashMap --- 存储键值对

HashMap 需要先导入:

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

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

    // 插入键值对
    scores.insert(String::from("小明"), 95);
    scores.insert(String::from("小红"), 88);
    scores.insert(String::from("小刚"), 72);
    println!("{:?}", scores);

    // 通过键访问值(返回 Option)
    match scores.get("小明") {
        Some(score) => println!("小明的分数: {}", score),
        None => println!("没找到"),
    }

    // 用方括号访问(键不存在会 panic,慎用)
    println!("小红的分数: {}", scores["小红"]);

    // 遍历所有键值对
    for (name, score) in &scores {
        println!("{}: {}分", name, score);
    }

    // 检查是否包含某个键
    println!("包含小刚? {}", scores.contains_key("小刚"));  // true

    // 删除键值对
    scores.remove("小刚");
    println!("删除后: {:?}", scores);

    // 更新值:如果键已存在则覆盖
    scores.insert(String::from("小明"), 100);
    println!("更新后小明: {}", scores["小明"]);

    // 用 entry API:只在键不存在时插入
    scores.entry(String::from("小李")).or_insert(60);
    println!("插入小李后: {:?}", scores);
}

核心规则

操作 写法

创建 HashMap::new()

插入 map.insert(key, value)

访问 map.get(&key) → Option<&V>

包含 map.contains_key(&key)

删除 map.remove(&key)

遍历 for (k, v) in &map { ... }

不存在才插入 map.entry(key).or_insert(value)

动手试试

补全下面的代码:

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

fn main() {
    // 补全:创建一个 HashMap,存储以下学生成绩
    // "语文" -> 85, "数学" -> 92, "英语" -> 78
    // 然后打印整个 HashMap
    // 期望输出: {"语文": 85, "数学": 92, "英语": 78}(顺序可能不同)

    // 补全:用 get 获取"数学"的成绩,用 match 打印
    // 期望输出: 数学成绩: 92

    // 补全:用 for 循环遍历 HashMap,计算所有科目的总分并打印
    // 期望输出: 总分: 255

    // 补全:用 entry API,如果"体育"不存在则插入 88
    // 打印整个 HashMap
    // 期望输出包含: "体育": 88

    // 补全:删除"英语",然后打印 HashMap
    // 期望输出: {"语文": 85, "数学": 92, "体育": 88}(顺序可能不同)
}

期望输出:

{"语文": 85, "数学": 92, "英语": 78}

数学成绩: 92

总分: 255

{"语文": 85, "数学": 92, "英语": 78, "体育": 88}

{"语文": 85, "数学": 92, "体育": 88}

写好了贴过来,没问题就进入第12课:结构体 Struct 👋

贴代码

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

fn main() {
    // 补全:创建一个 HashMap,存储以下学生成绩
    // "语文" -> 85, "数学" -> 92, "英语" -> 78
    // 然后打印整个 HashMap
    // 期望输出: {"语文": 85, "数学": 92, "英语": 78}(顺序可能不同)
    let mut scores = HashMap::new();
    scores.insert("语文", 85);
    scores.insert("数学", 92);
    scores.insert("英语", 78);
    println!("{:?}", scores);

    // 补全:用 get 获取"数学"的成绩,用 match 打印
    // 期望输出: 数学成绩: 92
    match scores.get("数学") {
        Some(v) => println!("数学成绩: {}", v),
        None => println!("没有数学成绩"),
    }

    // 补全:用 for 循环遍历 HashMap,计算所有科目的总分并打印
    // 期望输出: 总分: 255
    let mut total = 0;
    for (_subject, score) in &scores {
        total += score;
    }
    println!("总分: {}", total);

    // 补全:用 entry API,如果"体育"不存在则插入 88
    // 打印整个 HashMap
    // 期望输出包含: "体育": 88
    scores.entry("体育").or_insert(88);
    println!("{:?}", scores);

    // 补全:删除"英语",然后打印 HashMap
    // 期望输出: {"语文": 85, "数学": 92, "体育": 88}(顺序可能不同)
    scores.remove("英语");
    println!("{:?}", scores);
}
 

运行示例(HashMap无序,键的先后顺序每次运行不一定一样)

plaintext

{"语文": 85, "数学": 92, "英语": 78}

数学成绩: 92

总分: 255

{"语文": 85, "数学": 92, "英语": 78, "体育": 88}

{"语文": 85, "数学": 92, "体育": 88}

HashMap核心知识点

  1. HashMap::new() 创建空哈希map;增删改需要 mut。
  2. map.insert(键, 值) :插入/覆盖一条记录。
  3. map.get(键) → 返回 Option<&V> ,配合 match 判断有无数据。
  4. 遍历 for (k,v) in &map :借用遍历,不会拿走所有权。
  5. entry(键).or_insert(默认值) :entry经典用法,键不存在才插入;存在就什么也不干。
  6. map.remove(键) :删除指定键‑值对。
  7. ⚠️HashMap 无序,输出顺序不固定,不要像数组一样依赖索引顺序!

对比 Python dict:HashMap ≈ Python 的字典(dict),功能非常接近。

完成!HashMap 基础过关,可以开启下一课。

相关推荐
约克31 小时前
商水约克中央空调商用工程的行业洞察与落地要点
学习
yume_sibai1 小时前
03-Rust 函数式编程特性(闭包 + Iterator + Option/Result + 链式调用)
开发语言·后端·rust
奈斯先生Vector1 小时前
AIGC 视频生成实战:用 Kling Video 拆解文生视频、图生视频与完整工作流
开发语言·人工智能·windows·python·aigc·音视频
小玮看世界1 小时前
[Python]螺旋遍历 vs 最短路径:方向控制类算法的“同源异流”
开发语言·python·算法
OPEN-F1 小时前
ROS2系列教程:tf2坐标变换详解(C++/Python)
开发语言·c++·python
王的宝库2 小时前
Linux 性能优化入门
linux·学习
XR1234567882 小时前
医院基础网络改造升级选型深度解析
开发语言·网络·php
reasonsummer2 小时前
【办公类-146-05】20260901《一分园、二分园四大教育》(优化版:标题excle+复制AI文字+Python占位符录入)
开发语言·数据库·c#
名字还没想好☜2 小时前
Go 标准库 flag 包实战:参数解析、子命令、自定义 Value 类型与默认值
开发语言·后端·golang·go