我需要获取与BTreeMap中最大值关联的键。(反过来做很简单。(
到目前为止,我的尝试是:
let mut opt_pair: Option<(&Foo, u32)> = None;
for (key, value) in my_btreemap { // my_btreemap is known to be non-empty
match opt_pair {
Some(pair) => {
if value > pair.1 {
opt_pair = Some((key, value));
}
},
None => {
opt_pair = Some((key, value));
}
}
}
opt_pair.unwrap().0
有没有一种更实用的惯用方法?
使用iter
来获得每对的迭代器。然后在迭代器上调用max_by_key
;这需要一个闭包来进行比较。
let opt_pair = map
.iter() // get an iterator over the tree
.max_by_key( |p| p.1 ) // check the value of each pair for the max
.unwrap(); // unwrap the result
println!("key: {}, value: {}", opt_pair.0, opt_pair.1);