【rust】iterator

iterator

官方文档

参考博客

for i in 1..10 {}//[1,10)
for _ in 0..10 {}//避免实例化迭代器

let a = [1, 2, 3, 4];
let mut iter = a.iter();

//迭代器的一些函数/适配器
(0..10).count();//10
(0..11).filter(|x| (x%2==0));//一个返回true的闭包
(0..10).rev();//反转
(0..10).map(|x| x*x);//返回结果,进行迭代
iter.nth(1);//nth运行后累加,第二次nth(1)和这次结果不同
iter.step_by(2);iter.next();//步长为2
a1.iter().chain(a2.iter());//*a2接在a1后
a1.iter().zip(a2.iter());//*a1第i项和a2第i项合并
iter.for_each(...);//!不是很清楚
iter.filter(|x| x.is_positive());//过滤器,返回为true
iter.filter_map(...);//!不是很清楚
iter.enumerate();//把每个iter的位置和内容组合
iter.peekable();//!类似next但不会推进
iter.skip_while(|x| x.is_negative());//*跳过第一个true的地方
iter.take_while(|x| x.is_negative());//*取第一个true的地方
iter.skip(2);//跳过前2个
iter.take(2);//取前2个
iter.scan(...);//!没看懂
words.flatten();//*拆掉一层
words.iter().flat_map(|s| s.chars());//==map().flatten()
iter.fuse();//*创造iter以第一个None结束
iter.inspect(|x| println!("{}",x));//*对每个iter做什么
iter.by_ref()//*借用iter,不消耗
iter.collect()//将迭代器转换成集合

//experimental API
iter.advance_by(10)//返回Ok(())或者Err(k)
iter.map_while(...);//!不是很清楚

注:

//* 表示更多可参考官方文档

//! 表示没咋看懂

有一说一这个也太多啦,先到这里collect

要是有好心人刚好看到我这个,可以告诉我几个我看不懂的是啥,就好啦

 

错误相关

  • = note: iterators are lazy and do nothing unless consumed

If you are trying to execute a closure on an iterator for its side effects, use for instead.

或者这里用for_each()语句

https://stackoverflow.com/questions/34765967/how-do-i-cope-with-lazy-iterators

posted @ 2021-01-18 19:58  carrotmvp  阅读(113)  评论(0编辑  收藏  举报