Rust 如何让迭代器链为_each()执行操作并同时返回计数?

Rust 如何让迭代器链为_each()执行操作并同时返回计数?,rust,iterator,Rust,Iterator,我有一个生成数据的长迭代器链,该数据插入到一个固定数组中,每个数组都有。MWE版本): fn f(xs:impl迭代器){ 设mut buf=[0u8;32]; xs.zip(buf.iter_mut())。对于每个(|(v,b)|*b=v); //…过程buf } 我想数一数插入了多少个值。一个mut变量在中为每个更新是一种可能性,但我想看看mut是否可以避免。尝试了以下操作: fn g(xs:impl迭代器){ 设mut buf=[0u8;32]; 设c=xs.zip(buf.iter_m

我有一个生成数据的长迭代器链,该数据插入到一个固定数组中,每个数组都有
。MWE版本):

fn f(xs:impl迭代器){
设mut buf=[0u8;32];
xs.zip(buf.iter_mut())。对于每个(|(v,b)|*b=v);
//…过程buf
}
我想数一数插入了多少个值。一个
mut
变量在
中为每个
更新是一种可能性,但我想看看
mut
是否可以避免。尝试了以下操作:

fn g(xs:impl迭代器){
设mut buf=[0u8;32];
设c=xs.zip(buf.iter_mut()).inspect(|(v,b)|*b=v.count();
//…过程buf
}
但这不起作用,因为我无法在
inspect
内部修改
b

迭代器链是否有方法执行数组赋值并返回计数

一个
mut
变量在
中为每个
更新是一种可能性,但我想看看
mut
是否可以避免

这将是我的第一个建议,但是,如果您希望看到另一种方法,您可以将
xs
上的边界收紧为
ExactSizeIterator
,而不仅仅是
Iterator
,它使您能够查询其
len
,然后您可以使用简单的数学计算
计数

使用std::cmp;
fn f(xs:impl ExactSizeIterator){
设mut buf=[0u8;32];
let count=cmp::min(32,xs.len());
xs.zip(buf.iter_mut())。对于每个(|(v,b)|*b=v);
//工艺buf
}

在这种情况下,您只需将
inspect
替换为
map

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
}
fn g(xs:impl迭代器){
设mut buf=[0u8;32];
设c=xs.zip(buf.iter_mut()).map(|(v,b)|*b=v.count();
//…过程buf
}
这个
map()
将产生一个
()
s的迭代器(因为这是赋值返回的结果),但您只需要计算,所以实际值是什么并不重要