rust-itertools / itertools

Extra iterator adaptors, iterator methods, free functions, and macros.
https://docs.rs/itertools/
Apache License 2.0
2.64k stars 299 forks source link

`k_smallest[_by]/tail`: similarities and differences #904

Closed Philippe-Cholet closed 3 months ago

Philippe-Cholet commented 4 months ago

I find my new tail (#899) quite similar to k_smallest and its recent variants: we fuse the iterator, collect a limited number of items, than update the resulting slice with iter.for_each.

In tail, I consume the iterator (doing so can have wanted side effects) even when n = 0 while k_smallest and variants do not but merely drop it. In tail, I have a special case for n = 1 while k_smallest and variants do not (it could use a possibly faster min[_by]).

I think we should update k_smallest and k_smallest_general accordingly.

Do you see other differences we should fix?