【问题标题】:How do I get the key associated with the maximum value of a Rust HashMap?如何获取与 Rust HashMap 的最大值关联的键?
【发布时间】:2020-10-12 23:30:42
【问题描述】:

例如,给定数据:

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;
    }
}

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

【问题讨论】:

标签: rust


【解决方案1】:

遍历hashmap中的所有键值对,比较它们的值,只保留最大值的键:

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));
}

另见:

【讨论】:

    【解决方案2】:
    let key_with_max_value = a_hashmap.iter().max_by_key(|entry | entry.1).unwrap();
    
    dbg!(key_with_max_value.0);
    

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

    【讨论】:

      【解决方案3】:

      也许你可以试试这个:if let Some(max) = a_hash_map.keys().max(){println!("max:{}", max);}

      【讨论】:

      • 这将返回具有最高值的键,而不是键的最大关联值。我会在问题中更清楚地说明这一点。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-06-26
      • 2016-03-09
      • 1970-01-01
      • 2022-01-11
      • 1970-01-01
      • 2019-10-24
      • 2019-01-01
      相关资源
      最近更新 更多