我正在尝试删除以下示例中的重复项:
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();
}
Run Code Online (Sandbox Code Playgroud)
我收到了(预期)错误
error[E0599]: no method named `dedup` found for type `std::vec::Vec<User>` in the current scope
--> src/main.rs:23:11
|
23 | users.dedup();
| ^^^^^
|
Run Code Online (Sandbox Code Playgroud)
如何从删除重复users的email值?我可以实现dedup()功能struct User还是我必须做其他事情?
如何为泛型类型的向量实现以下特征Vec<T>?
例如,如何以Difference通用方式实现以下(工作)特征(例如,使其对Vec<i32>, Vec<f32>,有效Vec<f64>)?
trait Difference {
fn diff(&self) -> Vec<f64>;
}
impl Difference for Vec<f64> {
fn diff(&self) -> Vec<f64> {
self.windows(2)
.map(|slice| (slice[0] - slice[1]))
.collect()
}
}
fn main() {
let vector = vec![1.025_f64, 1.028, 1.03, 1.05, 1.051];
println!("{:?}", vector.diff());
}
Run Code Online (Sandbox Code Playgroud)
从查看文档来看,它似乎应该是这样的:
trait Difference<Vec<T>> {
fn diff(&self) -> Vec<T>;
}
impl Difference for Vec<T> {
fn diff(&self) -> Vec<T> {
self.windows(2)
.map(|slice| (slice[0] - slice[1]))
.collect()
} …Run Code Online (Sandbox Code Playgroud) 我已经解析了一个文件,按行分割字符串,并希望在每个向量中只留下唯一的元素.我期望vec.dedup()这样工作:
let mut vec = vec!["a", "b", "a"];
vec.dedup();
assert_eq!(vec, ["a", "b"]);
Run Code Online (Sandbox Code Playgroud)
但它失败了:
thread 'main' panicked at 'assertion failed: `(left == right)`
left: `["a", "b", "a"]`,
right: `["a", "b"]`', src/main.rs:4:4
Run Code Online (Sandbox Code Playgroud)
如何删除重复项?