我想修改存储在Rust集合(BTreeSet)中的对象。
我想在这里实现以下目标:
use std::collections::BTreeSet;
#[derive(Eq, PartialEq, Ord, PartialOrd, Debug)]
struct X {
key: String,
val: Option<i32>,
}
fn main() {
let mut set: BTreeSet<X> = BTreeSet::new();
set.insert(X {
key: "a".to_string(),
val: Some(1),
});
set.insert(X {
key: "b".to_string(),
val: Some(1),
});
nonify(&mut set, "a".to_string());
println!("{:?}", set);
}
fn nonify(set: &mut BTreeSet<X>, k: String) {
for mut s in set.iter() {
if s.key == k {
s.val = None;
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是行不通的,因为s不是可变引用。
我该如何在锈病中完成类似的工作?