如何获取与 Rust HashMap 的最大值关联的键?

Wil*_*ill 1 rust

例如,给定数据:

2 : 4  
1 : 3  
5 : 2  
Run Code Online (Sandbox Code Playgroud)

该函数将返回 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

有没有更好、更快或更简单的方法来做到这一点?

apa*_*niv 14

let key_with_max_value = a_hashmap.iter().max_by_key(|entry | entry.1).unwrap();

dbg!(key_with_max_value.0);
Run Code Online (Sandbox Code Playgroud)

您将需要进行更好的错误处理。这段代码只是做了一个unwrap,期望至少有一个元素。


She*_*ter 11

遍历哈希图中的所有键值对,通过值比较它们,只保留最大值的键:

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));
}
Run Code Online (Sandbox Code Playgroud)

也可以看看: