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的迭代器(因为这是赋值返回的结果),但您只需要计算,所以实际值是什么并不重要