for_each_count 0.1.0

for_each_count and try_for_each_count extension methods for iterators
Documentation
  • Coverage
  • 75%
    3 out of 4 items documented3 out of 4 items with examples
  • Size
  • Source code size: 14.75 kB This is the summed size of all the files inside the crates.io package for this release.
  • Documentation size: 281.24 kB This is the summed size of all files generated by rustdoc for all configured targets
  • Ø build duration
  • this release: 9s Average build duration of successful builds.
  • all releases: 9s Average build duration of successful builds in releases after 2024-10-23.
  • Links
  • Homepage
  • glueball/for_each_count
    0 0 0
  • crates.io
  • Dependencies
  • Versions
  • Owners
  • glueball

for_each_count

Extremely simple crate providing an extension trait for the standard [Iterator] trait with two utility methods:

Both methods solve the common[^2] 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 methods[^1], 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.

[^1]: Like using [Iterator::inspect], or [Iterator::map] and [Iterator::count], or keeping a mutable count outside the closure passed to for_each. [^2]: Maybe not that common, but I've needed it a couple of times. Other people too.

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);