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}