rust - 如何让迭代器链执行 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
}
但这不起作用,因为我无法b
在inspect
.
迭代器链有没有办法进行数组赋值并返回计数?
解决方案
在这种情况下,您可以简单地替换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
}
这map()
将产生一个()
s 的迭代器(因为这是赋值返回的内容),但您只是在计数,因此实际值是什么并不重要。
推荐阅读
- go - 如何模拟接口实现
- snmp - Opendaylight 和 snmp4sdn 插件是否工作
- prometheus - 如何在 Prometheus 中使用两个指标执行查询?
- android - 如何将分页列表实时数据从 MainActivity 发送到 Fragment 并使其持久化
- airflow - 变量修改是否会在 Airflow 中进行审核?
- javascript - gulp-tinypng 和 gulp-imagemin 都不优化 png
- python - 如何在 SQLalchemy 中按日期和时间检索数据库条目?
- c++ - QAudioDecoder 在 Xubuntu 18.04 上返回无效的 QAudioFormat
- c# - 将图像上传到 Azure 云部署的应用程序时出现问题 - Xamarin
- c# - 在 C# 中使用正则表达式提取字符串