迭代器 | 1.高效便利数据的方式 2.不需要管理或者循环索引 3.迭代过程中不能修改元素 |
如何创建迭代器 | 1.创建借用迭代器 let vec = vec![1,2,3.4] let iter = vec.iter(); 2.创建可变借用迭代器(允许在遍历过程中修改集合元素 ) let mut vec = vec![1,2,3,4,5] let iter_mut = vec.iter_mut(); for num in iter_mut { *num *= 2; //修改每个元素 } 3.创建所有权迭代器 let vec = vec![1,2,3,4.5] let into_iter = vec.into_iter(); for num in iter { println!("{}",num); } // 下面的代码会导致编译错误,因为 `vec` 已经被 `into_iter` 消耗了 // println!("{:?}", vec); // 编译错误:borrow of moved value |
常见的迭代器方法 | 1.使用map和filter fn main() { let numbers = vec![1, 2, 3, 4, 5]; // 创建一个迭代器,对每个元素乘以 2 let doubled: Vec<i32> = numbers.iter().map(|x| x * 2).collect(); //collect:将迭代器中的元素收集到一个集合中 // 创建一个迭代器,筛选出偶数 let even_numbers: Vec<i32> = numbers.into_iter().filter(|x| x % 2 == 0).collect(); println!("Doubled: {:?}", doubled); println!("Even numbers: {:?}", even_numbers); } 2.使用fold计算总和 fn main() { let numbers = vec![1, 2, 3, 4, 5]; // 使用 fold 计算总和 let sum: i32 = numbers.iter().fold(0, |acc, &x| acc + x); //fold:将迭代器中的元素累积成一个单一的值 println!("Sum: {}", sum); } 3.迭代器的链式调用 fn main() { let numbers = vec![1, 2, 3, 4, 5]; // 链式调用:筛选出偶数,然后对每个元素乘以 2,最后收集到一个 Vec 中 let result: Vec<i32> = numbers.into_iter() .filter(|x| x % 2 == 0) .map(|x| x * 2) .collect(); println!("Result: {:?}", result); } |
11-05
404

05-07
1320
