Expand description
Extremely simple crate providing an extension trait for the standard Iterator trait with two utility methods:
for_each_count: Similar tofor_each()but returns the count of processed elementstry_for_each_count: Similar totry_for_each()but returns the count of processed elements in theOkcase.
Both methods solve the common1 use case of applying a transformation to iterator elements and then returning the length of the iterator.
While this is trivial to achieve using the standard methods2, I find these extension methods to be more ergonomic, and they are available in the big extension crates, like Itertools.
The provided extension methods try to mimic the way they’d be likely implemented in core: based on fold() and try_fold().
This seems to be the preferred strategy in the standard library. for_each(), try_for_each() and count() are all implemented like this at this time.
§Examples
use for_each_count::IteratorForEachCount;
let mut sum = 0;
let count = (1..=5).for_each_count(|x| sum += x);
assert_eq!(count, 5);
assert_eq!(sum, 15);Maybe not that common, but I’ve needed it a couple of times. Other people too. ↩
Like using Iterator::inspect, or Iterator::map and Iterator::count, or keeping a mutable count outside the closure passed to
for_each. ↩