Rust Vec::重复数据消除不起作用-如何从字符向量中筛选重复项?

Rust Vec::重复数据消除不起作用-如何从字符向量中筛选重复项?,rust,Rust,我需要从一个向量中过滤出重复项,这是合并两个向量的结果。我使用的是重复数据消除方法,但是它只从原始零件和邻域元素中删除重复项。 例如: 预期值:['a','b','c','d','e','f'] 得到:['a','b','c','d','a','d','e','f','a','c','d'] 如何从合并向量中删除重复项?引用文档 删除向量中连续重复的元素。 如果向量已排序,则会删除所有重复项 您必须首先对向量进行排序,然后对其进行重复数据消除 fn main() { let mut a

我需要从一个向量中过滤出重复项,这是合并两个向量的结果。我使用的是重复数据消除方法,但是它只从原始零件和邻域元素中删除重复项。 例如:

预期值:['a','b','c','d','e','f'] 得到:['a','b','c','d','a','d','e','f','a','c','d']


如何从合并向量中删除重复项?

引用文档

删除向量中连续重复的元素。 如果向量已排序,则会删除所有重复项

您必须首先对向量进行排序,然后对其进行重复数据消除

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)
}

引用文件以供参考

删除向量中连续重复的元素。 如果向量已排序,则会删除所有重复项

您必须首先对向量进行排序,然后对其进行重复数据消除

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)
}

除了hellow给出的答案外,还可以使用哈希集在不排序的情况下对向量进行重复数据消除:


保留满足谓词的元素,如果插入的元素不在集合中,则返回true。由于哈希集只能有唯一的成员,这使得向量只保留其重复元素的第一次出现。

除了hellow给出的答案外,还可以在不使用哈希集排序的情况下对向量进行重复数据消除:


保留满足谓词的元素,如果插入的元素不在集合中,则返回true。由于哈希集只能有唯一的成员,这使得向量只保留其重复元素的第一次出现。

此解决方案保留原始向量的顺序,这有时是一个理想的属性。如果您不关心顺序,我建议从一开始就使用HashSet而不是Vec。此解决方案保留原始向量的顺序,这有时是一个理想的属性。如果您不关心顺序,我建议从一开始就使用HashSet而不是Vec。
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']
}