0Pricing
Learn Rust Coding · 课时

索引和迭代

访问元素并遍历它们。

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

按索引读取

向量中的每个元素都有一个称为索引的位置编号。索引从 0 开始,因此第一个元素的索引是 0。

使用方括号读取元素,例如使用 v[0] 读取第一个值。

fn main() {
    let v = vec![100, 200, 300];
    println!("first = {}", v[0]);
    println!("third = {}", v[2]);
}

越界会导致崩溃

访问向量末尾之外的索引会导致程序崩溃并停止运行。对于长度为 3 的向量,唯一有效的索引是 0、1 和 2。

在这里请求 v[5] 会导致崩溃,因此请始终确保索引在有效范围内。

使用 get 安全访问

get 方法会返回一个 Option,而不会导致程序崩溃。如果索引存在,您会得到 Some(value);如果索引越界,则会得到 None。

这样,您就可以优雅地处理缺失元素。

fn main() {
    let v = vec![1, 2, 3];
    match v.get(5) {
        Some(x) => println!("got {}", x),
        None => println!("no such index"),
    }
}

元素数量

len 方法会返回元素数量。最后一个有效索引始终是 len - 1。

了解长度有助于您安全地进行循环,或在使用索引前检查边界。

fn main() {
    let v = vec![5, 6, 7, 8];
    println!("length = {}", v.len());
    println!("last = {}", v[v.len() - 1]);
}

遍历值

访问每个元素最简洁的方式,是使用 for 循环遍历向量的引用。使用 &v 会借用向量,因此之后仍然可以继续使用它。

每次循环都会将 n 绑定到一个元素的引用。

fn main() {
    let v = vec![2, 4, 6];
    for n in &v {
        println!("value: {}", n);
    }
}

使用索引遍历

当您还需要元素位置时,请调用 iter().enumerate()。它会在每一步返回一对 (index, value)。

这非常适合生成带编号的输出,或处理取决于位置的规则。

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

修改每个元素

要原地修改值,请遍历 &mut v,并且向量必须声明为 mut。每个 n 都是一个可变引用,因此需要使用 * 取消引用后再赋值。

这里会将每个元素都加倍。

fn main() {
    let mut v = vec![1, 2, 3];
    for n in &mut v {
        *n *= 2;
    }
    println!("{:?}", v);
}

对向量求和

迭代器让数学运算变得简单。iter().sum() 方法会将所有元素相加。

Rust 需要知道结果类型,因此我们将总和标注为 i32。

fn main() {
    let v = vec![10, 20, 30];
    let total: i32 = v.iter().sum();
    println!("sum = {}", total);
}

第一个和最后一个

first() 和 last() 方法会返回指向向量两端元素的 Option 引用。当向量为空时,它们会返回 None。

使用它们可以避免手动计算索引,也能避免越界崩溃。

fn main() {
    let v = vec![7, 8, 9];
    println!("{:?}", v.first());
    println!("{:?}", v.last());
}

使用 contains 搜索

要检查某个值是否存在,请使用 contains。它接收一个值的引用,并返回一个布尔值。

它会扫描向量,是一种快速检查成员关系的方法。

fn main() {
    let v = vec![3, 6, 9];
    println!("has 6? {}", v.contains(&6));
    println!("has 5? {}", v.contains(&5));
}

截取范围

切片可以使用范围借用向量的一部分,例如 &v[1..3]。起始位置包含在内,结束位置不包含在内。

切片让您可以在不复制元素的情况下处理其中的一段。

fn main() {
    let v = vec![10, 20, 30, 40];
    let middle = &v[1..3];
    println!("{:?}", middle);
}

快速检查

测试您对索引和迭代的理解。

回顾

您已经学会按索引读取元素,使用 get 安全访问元素,并使用 for、enumerate 和 &mut 进行遍历。

您还使用了 sum、first、last、contains 和切片。接下来,您将学习如何扩展和缩小向量。

常见问题解答

「索引和迭代」课时是免费的吗?

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

「索引和迭代」这节课中我会学到什么?

访问元素并遍历它们。 你通过在浏览器中直接运行的动手代码来练习 Learn Rust Coding,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

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

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

「索引和迭代」课时需要多长时间?

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

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

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

此课程中的所有课时

  1. 创建并填充向量
  2. 索引和迭代
  3. 扩展和缩减
  4. 结构体向量
← 返回 Learn Rust Coding