rs42/extensions/iterator/get_all_uniques.rs
1use std::collections::HashSet;
2use std::hash::Hash;
3
4/// Collects all unique elements of an iterator into type R
5/// Does not preserve element order
6pub trait GetAllUniques<T> {
7 /// Collects all unique elements of an iterator into type R
8 /// Does not preserve element order
9 ///
10 /// Example
11 /// ```
12 /// use rs42::extensions::iterator::GetAllUniques;
13 ///
14 /// let arr = [0, 0, 1, 1, 2, 2];
15 /// let uniques = arr.into_iter().get_all_uniques::<Vec<_>>();
16 /// assert_eq!(uniques.len(), 3);
17 /// assert!(uniques.contains(&0));
18 /// assert!(uniques.contains(&1));
19 /// assert!(uniques.contains(&2));
20 /// ```
21 fn get_all_uniques<R>(self) -> R
22 where
23 R: FromIterator<T>;
24}
25
26impl<I, T> GetAllUniques<T> for I
27where
28 I: Iterator<Item = T>,
29 T: Eq + Hash,
30{
31 fn get_all_uniques<R>(self) -> R
32 where
33 R: FromIterator<T>,
34 {
35 self.collect::<HashSet<T>>().into_iter().collect()
36 }
37}