rust - 如何获得与Rust HashMap的最大值关联的 key ?

标签 rust

例如,给定数据:

2 : 4  
1 : 3  
5 : 2  
该函数将返回2,因为其值(4)为最大值。
我在做:
let mut max_val = 0;
let mut max_key = "";
for (k, v) in a_hash_map.iter() {
    if *v > max_val {
        max_key = k;
        max_val = *v;
    }
}
有没有更好,更快或更简单的方法来做到这一点?

最佳答案

遍历哈希图中的所有键-值对,将它们与值进行比较,仅保留最大值的键:

use std::collections::HashMap;

fn example<K, V>(a_hash_map: &HashMap<K, V>) -> Option<&K>
where
    V: Ord,
{
    a_hash_map
        .iter()
        .max_by(|a, b| a.1.cmp(&b.1))
        .map(|(k, _v)| k)
}

fn main() {
    let map: HashMap<_, _> = vec![(2, 4), (1, 3), (5, 2)].into_iter().collect();
    dbg!(example(&map));
}
也可以看看:
  • How do I create a map from a list in a functional way?
  • How can min_by_key or max_by_key be used with references to a value created during iteration?
  • 关于rust - 如何获得与Rust HashMap的最大值关联的 key ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62525693/

    相关文章:

    Rust:条件特征继承

    rust - 可变 Vector 中引用的生命周期

    使用rust 错误 : borrow occurs after drop a mutable borrow

    rust - 没有解构的匹配臂中的条件

    rust - 在 Rust 中使用 from_iter 创建 BTreeSet

    generics - 为什么在关联类型上无法识别除第一个之外的超特征边界?

    iterator - 从选项到迭代器

    rust - 我如何借用 RefCell<HashMap>、找到一个键并返回对结果的引用?

    memory - 'static: std::marker::Sized` 不满足 - 我需要 Box 吗?

    indexing - 实现 Index 特征以返回一个不是引用的值