| Crates.io | uniques |
| lib.rs | uniques |
| version | 0.2.1 |
| created_at | 2025-09-05 18:24:42.58011+00 |
| updated_at | 2025-11-13 19:55:32.309718+00 |
| description | Analyze items in a slice and calculate the unique, first, duplicate, and subsequent items and their indices |
| homepage | |
| repository | https://github.com/qtfkwk/uniques |
| max_upload_size | |
| id | 1825903 |
| size | 25,572 |
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.
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());
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")]),
);
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")]),
);