从自定义结构的向量中删除重复项

时间:2015-06-22 10:34:59

标签: rust

我正在尝试删除以下示例中的重复项:

@header

我收到了(预期)错误

struct User {
    reference: String,
    email: String
}

fn main() {

    let mut users: Vec<User> = Vec::new();
    users.push(User { reference: "abc".into(), email: "test@test.com".into() });
    users.push(User { reference: "def".into(), email: "test@test.com".into() });
    users.push(User { reference: "ghi".into(), email: "test1@test.com".into() });

    users.sort_by(|a, b| a.email.cmp(&b.email));
    users.dedup();

}

如何通过src/main.rs:14:8: 14:15 error: no method named `dedup` found for type `collections::vec::Vec<User>` in the current scope src/main.rs:14 users.dedup(); ^~~~~~~ error: aborting due to previous error 值删除users的重复项?我可以为email实施dedup()功能,还是必须做其他事情?

1 个答案:

答案 0 :(得分:7)

如果您查看Vec::dedup的文档,请注意它位于以下标记的小部分中:

impl<T: PartialEq> Vec<T>

这意味着当满足给定约束时,下面的方法仅存在 。在这种情况下,dedup不存在,因为User没有实现PartialEq特征。在这种特殊情况下,您可以导出它:

#[derive(PartialEq)]
struct User { ... }

获得所有适用的特征通常是一个好主意; 派生EqCloneDebug可能是一个好主意。