dsalgo 0.3.7

A package for Datastructures and Algorithms.
Documentation
pub fn make_sparse_histogram<T>(mut values: Vec<T>) -> Vec<(T, u64)>
where
    T: Ord + Clone,
{
    values.sort();
    let mut iter = values.into_iter();
    let mut res = vec![];
    let mut value: T;
    let mut count: u64;
    if let Some(v) = iter.next() {
        value = v;
        count = 1;
    } else {
        return res;
    }
    for v in iter {
        if v == value {
            count += 1;
        } else {
            res.push((value, count));
            value = v;
            count = 1;
        }
    }
    res.push((value, count));
    res
}

#[cfg(test)]
mod tests {
    #[test]
    fn test() {
        use super::*;
        assert_eq!(
            make_sparse_histogram(vec![1, 1, 1, 2, 2, 2, 3, 3, 3]),
            vec![(1, 3), (2, 3), (3, 3)]
        );
    }
}