首页 > 解决方案 > 如何让迭代器链执行 for_each() 并返回计数?

问题描述

我有一个很长的迭代器链生成数据,这些数据被插入到带有for_each. MWE 版本(游乐场):

fn f(xs: impl Iterator<Item = u8>) {
    let mut buf = [0u8; 32];
    xs.zip(buf.iter_mut()).for_each(|(v, b)| *b = v);
    // ... process buf
}

我想计算插入了多少值。更新的mut变量for_each是一种可能性,但我想看看是否mut可以避免。尝试了以下方法:

fn g(xs: impl Iterator<Item = u8>) {
    let mut buf = [0u8; 32];
    let c = xs.zip(buf.iter_mut()).inspect(|(v, b)| *b = v).count();
    // ... process buf
}

但这不起作用,因为我无法binspect.

迭代器链有没有办法进行数组赋值并返回计数?

标签: rustiterator

解决方案


在这种情况下,您可以简单地替换inspectmap

fn g(xs: impl Iterator<Item = u8>) {
    let mut buf = [0u8; 32];
    let c = xs.zip(buf.iter_mut()).map(|(v, b)| *b = v).count();
    // ... process buf
}

map()将产生一个()s 的迭代器(因为这是赋值返回的内容),但您只是在计数,因此实际值是什么并不重要。


推荐阅读