【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
或者这里用for_each()语句
https://stackoverflow.com/questions/34765967/how-do-i-cope-with-lazy-iterators