← SEARCHABLE ARCHIVE
Rust · 2026-08-03

从 Rust 基础到掌握 — 第 6 集

使用集合、迭代器和闭包处理数据

INTERACTIVE READING MODE →

该博客上撰写的文章是出于教学目的而创建的。 另外,文章中的信息可能不正确,请谨慎。

Rust 的标准集合拥有它们存储的值。 迭代器按类型区分读取、借用或使用集合的方式。

Vec 和 HashMap

use std::collections::HashMap;

let mut party = Vec::new();
party.push(String::from("Rose"));

let mut items = HashMap::new();
items.insert(10, String::from("Potion"));

if let Some(name) = items.get(&10) {
    println!("{name}");
}

Vec是一个有序列表,HashMap是通过key来查找值的。 因为 get 可能没有值,所以它返回 Option。

借用检查器可防止在重新分配或修改集合时保留内部元素引用。

迭代器的所有权方法

for name in &party {
    println!("{name}");
}

for name in &mut party {
    name.push_str("_01");
}

&party 不可变地借用该元素,而 &mut party 则可变地借用该元素。 如果 party 本身作为值重复,则该元素的所有权会发生移动,并且以后无法使用原始元素。

迭代器和闭包

let mut alive: Vec<&Monster> = monsters
    .iter()
    .filter(|monster| monster.health > 0)
    .collect();

alive.sort_by_key(|monster| monster.health);

iter 创建借用元素的迭代器,filter 只传递满足条件的值。 最终集合是在调用collect 时创建的。

let bonus = 5;
let add_bonus = |damage: i32| damage + bonus;

可以通过借用或移动周围的值来捕获闭包。 如果闭包需要超出其原始范围,则需要检查是否需要 move 以及所有权去向。

不一定使用迭代器代码,因为它很快。 优点是可以分阶段表达过滤和变换的意图,同时保持所有权和借用方法。