Как указано в документации, Vec#dedup
удаляет только < сильные> последовательные элементы из вектора (это намного дешевле полной дедупликации). Было бы нормально работать, например, если бы вектор был vec!["a", "a", "b"]
.
Конечно, есть несколько потенциальных решений.
Чтобы получить вектор со всеми удаленными дубликатами с сохранением исходного порядка элементов, ящик itertools
предоставляет _ 4_ адаптер.
use itertools::Itertools;
let v = vec!["b", "a", "b"];
let v: Vec<_> = v.into_iter().unique().collect();
assert_eq!(v, ["b", "a"]);
Если порядок элементов не важен, вы можете сначала отсортировать элементы, а затем вызвать дедупликацию.
let mut v = vec!["a", "b", "a"];
v.sort_unstable();
v.dedup();
assert_eq!(v, ["a", "b"]);
Если важен быстрый поиск элементов, вы также можете рассмотреть возможность использования вместо него заданного типа, например HashSet
.
let v: HashSet<_> = ["a", "b", "a"].iter().cloned().collect();
let v2: HashSet<_> = ["b", "a"].iter().cloned().collect();
assert_eq!(v, v2);
person
E_net4 the curator
schedule
04.12.2017