Learn Rust Coding · 课时

遍历集合

for 与迭代器

第 4 / 4 课13 个步骤

遍历集合 是 CoddyKit 上的免费 Learn Rust Coding 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Learn Rust Coding 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Learn Rust Coding 课程共包含 4 节课。

使用 for 循环

for 循环是访问集合中每个元素的最简单方式。

fn main() {
    let nums = vec![1, 2, 3];
    for n in &nums {
        println!("{}", n);
    }
}

遍历范围

范围会生成一个可以遍历的序列。1..5 不包含末尾值;1..=5 包含末尾值。

fn main() {
    for i in 1..=3 {
        println!("i = {}", i);
    }
}

iter 方法

调用 .iter() 会创建一个迭代器,为每个元素生成引用。迭代器在被消耗之前都是惰性的。

fn main() {
    let v = vec![10, 20, 30];
    let mut it = v.iter();
    println!("{:?}", it.next());
    println!("{:?}", it.next());
}

三种遍历方式

向量提供三种遍历方式:

  • iter() — 生成 &T(借用)。
  • iter_mut() — 生成 &mut T(可变借用)。
  • into_iter() — 生成 T(获取所有权)。
fn main() {
    let v = vec![1, 2, 3];
    for x in v.into_iter() {
        println!("owned {}", x);
    }
}

使用 map 进行转换

map 会将闭包应用于每个元素,并生成一个新的迭代器。使用 collect 汇总结果。

fn main() {
    let v = vec![1, 2, 3];
    let squared: Vec<i32> = v.iter().map(|x| x * x).collect();
    println!("{:?}", squared);
}

使用 filter 进行筛选

filter 只保留闭包返回 true 的元素。

fn main() {
    let v = vec![1, 2, 3, 4, 5];
    let odds: Vec<i32> = v.into_iter().filter(|x| x % 2 == 1).collect();
    println!("{:?}", odds);
}

使用 sum 和 count 进行聚合

消耗型方法会将迭代器归约为单个值,例如 sum、count、max 和 min。

fn main() {
    let v = vec![4, 8, 15, 16];
    let total: i32 = v.iter().sum();
    let how_many = v.iter().count();
    println!("sum {} count {}", total, how_many);
}

链接适配器

可以将迭代器方法链接成清晰的处理流程。在最终消耗者处理之前,每一步都会转换数据流。

fn main() {
    let v = vec![1, 2, 3, 4, 5, 6];
    let result: i32 = v.iter()
        .filter(|x| *x % 2 == 0)
        .map(|x| x * 10)
        .sum();
    println!("{}", result);
}

使用 enumerate 获取索引

enumerate 会将每个元素与其索引配对,生成元组 (index, value)。

fn main() {
    let letters = vec!['a', 'b', 'c'];
    for (i, ch) in letters.iter().enumerate() {
        println!("{}: {}", i, ch);
    }
}

遍历 HashMap

迭代器也适用于映射。循环会生成键值元组。

use std::collections::HashMap;

fn main() {
    let mut m = HashMap::new();
    m.insert("a", 1);
    m.insert("b", 2);
    for (k, v) in &m {
        println!("{} -> {}", k, v);
    }
}

for 与迭代器方法的比较

普通的 for 循环非常适合打印等副作用操作。当需要将数据转换为新值时,迭代器适配器(map、filter、sum)则更为出色。

fn main() {
    let v = vec![2, 4, 6];
    let doubled: Vec<i32> = v.iter().map(|x| x * 2).collect();
    for x in &doubled {
        println!("{}", x);
    }
}

快速检查

回顾迭代器适配器的作用。

总结

在 Rust 中迭代集合:

  • for x in &collection 用于简单循环。
  • iter、iter_mut、into_iter 控制借用方式。
  • 适配器:map、filter、enumerate。
  • 消耗器:collect、sum、count、max。
fn main() {
    let prices = vec![10, 25, 40];
    let with_tax: Vec<i32> = prices.iter().map(|p| p + p / 5).collect();
    let total: i32 = with_tax.iter().sum();
    println!("{:?} total {}", with_tax, total);
}
免费开始

用 AI 导师学习 Rust — 免费

在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。

课程
39
课程
144

常见问题解答

「遍历集合」课时是免费的吗?

是的 — 「遍历集合」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Learn Rust Coding 课程的其余内容,请升级到 CoddyKit PRO。 Learn Rust Coding 课程共包含 4 节课。

「遍历集合」这节课中我会学到什么?

for 与迭代器 你通过在浏览器中直接运行的动手代码来练习 Learn Rust Coding,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Learn Rust Coding 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Learn Rust Coding 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。

「遍历集合」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Learn Rust Coding 课中编写并运行代码吗?

能。每节 Learn Rust Coding 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 向量
  2. 字符串与 &str
  3. HashMaps
  4. 遍历集合
← 返回 Learn Rust Coding