如何一次性计数、过滤和收集迭代器?

问题描述 投票:0回答:2

我想计算一个迭代器,对其进行过滤,并在一次迭代中收集过滤器。

我找不到任何零成本抽象可以让我做到这一点。使用循环我可以在单个循环中实现这一点。据我所知,使用迭代器适配器我需要两个循环。

我不知道这个高级 API 会是什么样子。类似于惰性折叠,以便在返回复合结果后应用适配器。

rust functional-programming iterator
2个回答
2
投票

关于:

let mut counter = 0;
iterator.inspect(|_| counter += 1).filter(|v| /* condition */).collect();

2
投票

作为一个功能性的书呆子,我会使用一个很好的旧

fold

let (count, filtered) = iterator.fold((0, Vec::new()), |(n, mut v), e| {
    if /* condition */ { v.push(e); }
    (n+1, v)
});
© www.soinside.com 2019 - 2024. All rights reserved.