我需要从 Vec<char>
中过滤掉重复项这是合并两个 vectors
的结果.我正在使用 dedup
方法,但是它只从原始部分和邻域元素中删除重复项。
例如:
fn main() {
let mut a = "abccdddd".chars().collect::<Vec<char>>();
let mut b = "dadddefacd".chars().collect::<Vec<char>>();
a.append(&mut b);
a.dedup();
println!("{:?}", a)
}
预期:['a', 'b', 'c', 'd', 'e', 'f']
得到:['a', 'b', 'c', 'd', 'a', 'd', 'e', 'f', 'a', 'c', 'd']
( playground )
如何从合并的向量中删除重复项?
除了 hellow 的答案之外,还可以通过使用 HashSet
对向量进行重复数据删除而不对其进行排序:
use std::collections::HashSet;
fn main() {
let mut a = "zabccdddd".chars().collect::<Vec<char>>();
let mut b = "dadddefacdz".chars().collect::<Vec<char>>();
a.append(&mut b);
let mut uniques = HashSet::new();
a.retain(|e| uniques.insert(e.clone()));
println!("{:?}", a) // ['z', 'a', 'b', 'c', 'd', 'e', 'f']
}
Vec::retain
保留满足谓词和 HashSet::insert
的元素如果集合中不存在插入的元素,则返回 true
。由于 HashSet
只能有唯一的成员,这使得向量只保留其重复元素的第一次出现。