rust 迭代
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | fn main() { let values = vec![ 1 , 2 , 3 ]; for v in values.into_iter() { println!( "{}" , v) } / / 下面的代码将报错,因为 values 的所有权在上面 ` for ` 循环中已经被转移走 / / println!( "{:?}" ,values); let values = vec![ 1 , 2 , 3 ]; let _values_iter = values. iter (); / / 不会报错,因为 values_iter 只是借用了 values 中的元素 println!( "{:?}" , values); let mut values = vec![ 1 , 2 , 3 ]; / / 对 values 中的元素进行可变借用 let mut values_iter_mut = values.iter_mut(); / / 取出第一个元素,并修改为 0 if let Some(v) = values_iter_mut. next () { * v = 0 ; } / / 输出[ 0 , 2 , 3 ] println!( "{:?}" , values); } |
具体解释在代码注释中,就不再赘述,不过有两点需要注意的是:
.iter()
方法实现的迭代器,调用next
方法返回的类型是Some(&T)
.iter_mut()
方法实现的迭代器,调用next
方法返回的类型是Some(&mut T)
,因此在if let Some(v) = values_iter_mut.next()
中,v
的类型是&mut i32
,最终我们可以通过*v = 0
的方式修改其值
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】