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 的方式修改其值
posted @   CrossPython  阅读(38)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示