You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Scala Map中获取所有具有最大值的键值对

获取Scala Map中所有值为最大值的键值对

刚好我之前也碰到过这个需求!你说得没错,Map(1 -> 7, 2 -> 1, 4 -> 7, 3 -> 2).maxBy(x => x._2)确实只会返回第一个出现的(1,7),但要拿到所有值等于最大值的条目,我们可以用两种常见的方式实现:

方法一:先找最大值再筛选

这种方式逻辑直观,适合刚接触Scala的同学:

  1. 先提取Map里所有的值,找到其中的最大值
  2. 筛选出Map中所有值等于这个最大值的键值对,转成列表

示例代码:

val myMap = Map(1 -> 7, 2 -> 1, 4 -> 7, 3 -> 2)
// 第一步:获取最大值
val maxValue = myMap.values.max
// 第二步:筛选所有值为最大值的条目并转成列表
val maxEntries = myMap.filter(_._2 == maxValue).toList
// 输出结果:List((1,7), (4,7))

方法二:链式分组+取最大组

如果喜欢更简洁的链式操作,可以用groupBy先按值分组,再直接取最大值对应的组:

val myMap = Map(1 -> 7, 2 -> 1, 4 -> 7, 3 -> 2)
val maxEntries = myMap.groupBy(_._2).maxBy(_._1)._2.toList
// 输出同样是:List((1,7), (4,7))

这里的逻辑是:

  • groupBy(_._2)会把Map按值分组,得到一个新的Map,键是原Map的值,值是原Map中所有对应这个值的键值对集合
  • maxBy(_._1)会根据分组后的键(也就是原Map的值)找到最大的那个组
  • 最后取_2拿到这个组里的所有键值对,转成列表

两种方法都能满足你的需求,看你更习惯哪种写法啦!

内容的提问来源于stack exchange,提问作者Praveen L

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 02:29:06