Expand description
Analyze items in a slice and calculate the unique, first, duplicate, and subsequent items and their indices
Uniques field | Description | Itertools method |
|---|---|---|
unique | Values appearing exactly once for indices | none |
first | First occurring values for indices | Itertools::unique |
duplicate | Duplicate values for indices | Itertools::duplicates |
subsequent | Subsequent duplicate values for indices | Itertools::duplicates |
unique_idx | Indices of values that appear exactly once | none |
first_idx | Indices of first occurring values | none |
duplicate_idx | Indices of values that are duplicated | none |
subsequent_idx | Indices of subsequent duplicate values | none |
Note that
Itertoolsmethods 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