Skip to main content

Crate uniques

Crate uniques 

Source
Expand description

Analyze items in a slice and calculate the unique, first, duplicate, and subsequent items and their indices

Uniques fieldDescriptionItertools method
uniqueValues appearing exactly once for indicesnone
firstFirst occurring values for indicesItertools::unique
duplicateDuplicate values for indicesItertools::duplicates
subsequentSubsequent duplicate values for indicesItertools::duplicates
unique_idxIndices of values that appear exactly oncenone
first_idxIndices of first occurring valuesnone
duplicate_idxIndices of values that are duplicatednone
subsequent_idxIndices of subsequent duplicate valuesnone

Note that Itertools methods do not include indices.

§Examples

§Example with no duplicate values and only unique values

use std::collections::HashMap;
use uniques::*;

let result = Uniques::new(&["a", "b", "c"]);

assert_eq!(
    result.unique_idx,
    HashMap::from([(&"a", 0), (&"b", 1), (&"c", 2)]),
);

assert_eq!(
    result.first_idx,
    HashMap::from([(&"a", 0), (&"b", 1), (&"c", 2)]),
);

assert!(result.duplicate_idx.is_empty());

assert!(result.subsequent_idx.is_empty());

assert_eq!(
    result.unique,
    HashMap::from([(0, &"a"), (1, &"b"), (2, &"c")]),
);

assert_eq!(
    result.first,
    HashMap::from([(0, &"a"), (1, &"b"), (2, &"c")]),
);

assert!(result.duplicate.is_empty());

assert!(result.subsequent.is_empty());

§Example with duplicate values and unique values

use std::collections::HashMap;
use uniques::*;

let result = Uniques::new(&["a", "b", "c", "a", "b"]);

assert_eq!(
    result.unique_idx,
    HashMap::from([(&"c", 2)]),
);

assert_eq!(
    result.first_idx,
    HashMap::from([(&"a", 0), (&"b", 1), (&"c", 2)]),
);

assert_eq!(
    result.duplicate_idx,
    HashMap::from([(&"a", vec![0, 3]), (&"b", vec![1, 4])]),
);

assert_eq!(
    result.subsequent_idx,
    HashMap::from([(&"a", vec![3]), (&"b", vec![4])]),
);

assert_eq!(
    result.unique,
    HashMap::from([(2, &"c")]),
);

assert_eq!(
    result.first,
    HashMap::from([(0, &"a"), (1, &"b"), (2, &"c")]),
);

assert_eq!(
    result.duplicate,
    HashMap::from([(0, &"a"), (1, &"b"), (3, &"a"), (4, &"b")]),
);

assert_eq!(
    result.subsequent,
    HashMap::from([(3, &"a"), (4, &"b")]),
);

§Example with only duplicate values and no unique values

use std::collections::HashMap;
use uniques::*;

let result = Uniques::new(&["a", "b", "c", "a", "b", "c"]);

assert!(result.unique_idx.is_empty());

assert_eq!(
    result.first_idx,
    HashMap::from([(&"a", 0), (&"b", 1), (&"c", 2)]),
);

assert_eq!(
    result.duplicate_idx,
    HashMap::from([
        (&"a", vec![0, 3]),
        (&"b", vec![1, 4]),
        (&"c", vec![2, 5]),
    ]),
);

assert_eq!(
    result.subsequent_idx,
    HashMap::from([(&"a", vec![3]), (&"b", vec![4]), (&"c", vec![5])]),
);

assert!(result.unique.is_empty());

assert_eq!(
    result.first,
    HashMap::from([(0, &"a"), (1, &"b"), (2, &"c")]),
);

assert_eq!(
    result.duplicate,
    HashMap::from([
        (0, &"a"),
        (1, &"b"),
        (2, &"c"),
        (3, &"a"),
        (4, &"b"),
        (5, &"c"),
    ]),
);

assert_eq!(
    result.subsequent,
    HashMap::from([(3, &"a"), (4, &"b"), (5, &"c")]),
);

Structs§

Uniques
Analyze items in a slice and calculate the unique, first, duplicate, and subsequent items and their indices