← 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 以及所有權去向。

不一定使用迭代器程式碼,因為它很快。 優點是可以分階段表達過濾和變換的意圖,同時保持所有權和借用方法。