Function visioncortex::disjoint_sets::group_by_cached_key[][src]

pub fn group_by_cached_key<T, Key, Extract, Group>(
    items: Vec<T>,
    extract_key: Extract,
    should_group: Group
) -> Vec<Vec<T>> where
    Extract: Fn(&T) -> Key,
    Group: Fn(&Key, &Key) -> bool

Groups items with a key extraction function and a equivalence testing function on the keys. See the documentation of group_by for the requirements of the testing function.

During grouping, the key function is called only once per element.

For simple key functions, group_by is likely to be faster.

Example

use visioncortex::disjoint_sets::group_by_cached_key;
let points = vec![1,1,7,9,24,1,4,7,3,8];
let groups = group_by_cached_key(points, |&x| x, |&x, &y| {
    (x - y) * (x - y) < 2
});
// should be grouped as below:
// {1, 1, 1}, {3, 4}, {7, 7, 8, 9}, {24}
for mut group in groups {
    println!("{:?}", group);
    group.sort();
    if group.len() == 4 {
        assert_eq!(group, [7, 7, 8, 9]);
    } else if group.len() == 3 {
        assert_eq!(group, [1, 1, 1]);
    } else if group.len() == 2 {
        assert_eq!(group, [3, 4]);
    } else {
        assert_eq!(group, [24]);
    }
}