可变迭代
本课属于 Coddy Rust 学习旅程的“逻辑与流程”单元。第 12 课,共 66 课。
有时,你需要做的不只是读取向量元素,还需要修改它们。上一课介绍了如何遍历并读取值,而本课将教你如何在遍历过程中使用可变引用来修改元素。
要在遍历时修改元素,你需要在 for 循环中使用 &mut,而不是 &:
let mut numbers = vec![1, 2, 3, 4];
for number in &mut numbers {
*number = *number * 2;
}&mut numbers 会创建一个指向该向量的可变引用,每次迭代都会为你提供一个指向单个元素的可变引用。* 运算符(称为解引用运算符)用于访问和修改引用所指向的实际值。
这种模式对于就地转换数据非常有用。你无需创建一个包含修改后值的新向量,就能高效地更新现有向量。要实现这一点,必须将向量声明为 mut,因为你要更改它的内容。
执行上面的循环后,numbers 中会包含 [2, 4, 6, 8],每个原始值都在原位置翻倍。
挑战
简单编写一个函数 add_ten_to_all,它接收一个可变向量 numbers,并将每个元素原地加上 10,然后返回修改后的向量。
使用带有 &mut 的可变迭代,直接修改每个元素。记得使用解引用运算符 * 来访问并修改实际值。
参数:
numbers(Vec<i32>):要修改的整数可变向量
返回值:每个元素都加上 10 后的修改向量(Vec<i32>)
亲手试试
fn add_ten_to_all(mut numbers: Vec<i32>) -> Vec<i32> {
// 在这里编写代码
}这节课包含一个小测验。开始学习即可作答,并记录你的进度。
逻辑与流程中的所有课
自己练习: Rust 在线编译器