我需要从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']
如何从合并的向量中删除重复项?
答案 0 :(得分:7)
除了下面的答案外,还可以通过使用<table class="display table table-striped table-bordered dt-responsive">
对向量进行重复数据删除而不进行排序:
HashSet
Vec::retain
保留满足谓词的元素,如果插入的元素不存在于集合中,则HashSet::insert
返回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']
}
。由于true
只能具有唯一的成员,因此这使得向量仅保留其重复元素的首次出现。
答案 1 :(得分:5)
引用Vec::dedup
的文档
删除向量中的连续重复元素。
如果对向量进行了排序,则会删除所有重复项。
您必须先对向量进行排序,然后对其进行消散。
fn main() {
let mut a = "abccdddd".chars().collect::<Vec<char>>();
let mut b = "addddefacd".chars().collect::<Vec<char>>();
a.append(&mut b);
a.sort();
a.dedup();
println!("{:?}", a)
}