现在多半 RUST 教程都是基于 RUST 官方提供的The Rust Programming Language 电子教程 。我自己在学习 RUST 过程中也是基于这本电子书,边学习边实践书中实例来进行学习的。
今天要给大家说内容是 RUST 中的迭代器相关内容,那么是什么是迭代器,在 RUST 迭代器又有什么不同之处呢? 对于集合元素按一定顺序执行某种操作。
fn main(){
let v = vec![1,2,3];
let v_iter = v.iter();
}
在 Rust 中,迭代器是惰性的,开始对于惰性这个词还不理解,为什么是惰性(lazy)的呢? 惰性又有什么好处呢? 也就是在调用迭代器方法之前是没有任何效果(或者动作),也就是我们去主动从迭代器中一个一个随时取出元素,创建好迭代器不会一下子把集合里所有元素都抛给调用者。这就是惰性的好处。例如,上面的代码中,仅是通过调用 Vec<T>上定的iter方法 创建了一个迭代器。
fn main(){
let v = vec![1,2,3];
let v_iter = v.iter();
for val in v_iter {
println!("Got: {}", val);
}
}
我们用迭代器和for循环在每个项目上执行一些代码,尽管我们到现在为止都没有提到对iter的调用是什么。
fn main(){
let v = vec![1,2,3];
let mut v_iter = v.iter();
// for val in v_iter {
// println!("Got: {}", val);
// }
println!("{:?}",v_iter.next())
}
fn main(){
let v = vec![1,2,3];
let mut v_iter = v.iter();
// for val in v_iter {
// println!("Got: {}", val);
// }
println!("{:?}",v_iter.next());
println!("{:?}",v_iter.next());
println!("{:?}",v_iter.next());
println!("{:?}",v_iter.next());
}
如果在标准库中还没有提供迭代器,就需要设置一个指针(索引),指向集合中某一个元素,通过不断递增指针达到遍历集合中每一个元素,显然这里相对于迭代器多出一个保存指针的变量。
而且迭代器给了你更多的灵活性,可以对许多不同种类的序列使用同样的逻辑,不限于那些以索引的数据结构。
Some(1)
Some(2)
Some(3)
None