我正在尝试删除以下示例中的重复项:
@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()
功能,还是必须做其他事情?
答案 0 :(得分:7)
如果您查看Vec::dedup
的文档,请注意它位于以下标记的小部分中:
impl<T: PartialEq> Vec<T>
这意味着当满足给定约束时,下面的方法仅存在 。在这种情况下,dedup
不存在,因为User
没有实现PartialEq
特征。在这种特殊情况下,您可以导出它:
#[derive(PartialEq)]
struct User { ... }
获得所有适用的特征通常是一个好主意; 还派生Eq
,Clone
和Debug
可能是一个好主意。