for循环
迭代一个数组
rust的for循环实际上是被编译器扩展成了对方法的调用。对于使用for循环来迭代一个数组,主要有3种方式。
简化形式 | 等价于 | 访问级别 |
---|---|---|
for item in x | for item in x.into_iter() | 拥有所有权 |
for item in &x | for item in x.iter() | 只读 |
for item in &mut x | for item in x.iter_mut() | 读写 |
这里需要注意的是,第一种for循环将会把x的所有权转移给for循环,因此,在for循环后,将不能再次访问数组x. 如果for循环后仍需访问,则需要使用第二/第三种for的方式。
在上述代码中,我们使用的是第一种迭代方式,因此,第26行无法获取names数组的所有权,编译出错。
指定循环的范围
我们可以通过以下方法来指定循环的范围,这是一个左闭右开区间。
代码语言:javascript复制for x in 0..10{
println!("{}", x);
}
重要!尽量避免手动管理索引变量!
在C/C 这些编程语言中,我们会使用一个计数变量来作为索引下标来访问数组。Rust不推荐这种方式,原因是:
- 性能问题:我们将要维护一个计数变量,这将会增加计算量。
- 安全问题:使用手动管理索引的时候,数组可能会在迭代过程中被更改。如果自动管理迭代器的话,rust编译器将会保证迭代过程中数组不会被其他的地方更改。
转载请注明来源:https://longjin666.cn/?p=1577