Trait core_extensions::iterators::IteratorExt
source · pub trait IteratorExt: Iterator {
// Provided methods
fn extending<C>(self, extend: &mut C)
where Self: Sized,
C: Extend<Self::Item> { ... }
fn collect_into<C>(self, extend: C) -> C
where Self: Sized,
C: Extend<Self::Item> { ... }
fn replace_nth(self, nth: usize, with: Self::Item) -> ReplaceNth<Self> ⓘ
where Self: Sized { ... }
fn sum_same(self) -> Self::Item
where Self: Sized,
Self::Item: Sum { ... }
fn product_same(self) -> Self::Item
where Self: Sized,
Self::Item: Product { ... }
}
Expand description
Extension trait for std::iter::Iterator
implementors.
Provided Methods§
sourcefn extending<C>(self, extend: &mut C)
fn extending<C>(self, extend: &mut C)
Collects into an existing collection by extending it.
§Example
use core_extensions::iterators::IteratorExt;
let mut list = vec![101, 102];
(0..10)
.filter(|&v| v<5 )
.map(|v| v*2 )
.extending(&mut list);
assert_eq!(list, vec![101, 102, 0, 2, 4, 6, 8]);
sourcefn collect_into<C>(self, extend: C) -> C
fn collect_into<C>(self, extend: C) -> C
Collects into a pre-allocated collection,returning it by value.
§Example
use core_extensions::iterators::IteratorExt;
let list = (0..10)
.filter(|&v| v<5 )
.map(|v| v*2 )
.collect_into(Vec::with_capacity(5));
assert_eq!(list.capacity(), 5);
assert_eq!(list, vec![0, 2, 4, 6, 8]);
§Example
Reusing an existing collection.
use core_extensions::iterators::IteratorExt;
let mut list = Vec::with_capacity(7);
list.push(100);
list.push(101);
let list = (0..10)
.filter(|&v| v<5 )
.map(|v| v*2 )
.collect_into(list);
assert_eq!(list.capacity(),7);
assert_eq!(list, vec![100, 101, 0, 2, 4, 6, 8]);
sourcefn replace_nth(self, nth: usize, with: Self::Item) -> ReplaceNth<Self> ⓘwhere
Self: Sized,
fn replace_nth(self, nth: usize, with: Self::Item) -> ReplaceNth<Self> ⓘwhere
Self: Sized,
An Iterator that replaces the nth element with another value.
§Example
use core_extensions::iterators::IteratorExt;
assert_eq!(
(0..=9).replace_nth(5, 1337).collect::<Vec<_>>(),
vec![0, 1, 2, 3, 4, 1337, 6, 7, 8, 9]
);
let list = vec!["hello", "dear", "world"];
assert_eq!(
list.into_iter().replace_nth(1, "my").collect::<Vec<_>>(),
vec!["hello", "my", "world"]
);
sourcefn sum_same(self) -> Self::Item
fn sum_same(self) -> Self::Item
Sums the items of the iterator, into the item’s type.
This like the Iterator::sum
method, with better type inference,
since with the Iterator::sum
method you must specify its return type.
§Example
use core_extensions::iterators::IteratorExt;
assert_eq!((1..=4).sum_same(), 10);
let arr = [3, 7, 11, 29];
assert_eq!(arr.iter().copied().sum_same(), 50);
sourcefn product_same(self) -> Self::Item
fn product_same(self) -> Self::Item
Multiplies the items of the iterator, into the item’s type.
This like the Iterator::product
method, with better type inference,
since with the Iterator::product
method you must specify its return type.
§Example
use core_extensions::iterators::IteratorExt;
assert_eq!((1..=4).product_same(), 24);
let arr = [3, 4, 6];
assert_eq!(arr.iter().copied().product_same(), 72);