2015-06-22 91 views
3

我試圖刪除下面的例子重複刪除重複:來自自定義結構的載體

struct User { 
    reference: String, 
    email: String 
} 

fn main() { 

    let mut users: Vec<User> = Vec::new(); 
    users.push(User { reference: "abc".into(), email: "[email protected]".into() }); 
    users.push(User { reference: "def".into(), email: "[email protected]".into() }); 
    users.push(User { reference: "ghi".into(), email: "[email protected]".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 

我怎樣才能刪除重複從usersemail值?我可以爲struct User實施dedup()功能還是必須執行其他操作?

回答

6

如果你看一下Vec::dedup的文檔,你會注意到,它在通過標誌着一個小部分如下:

impl<T: PartialEq> Vec<T> 

這意味着它下面的方法存在給定的約束條件時,滿意。在這種情況下,dedup不存在,因爲User未實現PartialEq特徵。在這種特殊情況下,您可以推導出它:

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

推導所有適用特徵通常是一個好主意; 派生EqCloneDebug也許是個好主意。