2016-09-26 96 views
6

我试图从地图中拉出最大值以及其键值。例如:按值获取Scala地图中的最大键值对

val map = Map('a' -> 100, 'b' -> 23, ... 'z' -> 56)

其中100是最大的价值,我怎么会去拉( 'A',100)?我基本上想要使用Map.max,但是按价值而不是按键搜索。

回答

16

可以使用maxBy与函数从键值对只值:

val map = Map('a' -> 100, 'b' -> 23, 'z' -> 56) 

map.maxBy(_._2) // (a,100) 

这是为了

map.maxBy { case (key, value) => value } 
+0

完美的缩写形式,即作品!我不得不问,你在哪里得到传递给maxBy()的谓词的语法? – pmaurais

+1

如果您查看[API文档](http://www.scala-lang.org/api/current/#scala.collection.Map),您会发现'Map [A​​,B]':'def maxBy [C](f:((A,B))⇒C)(隐式cmp:排序[C]):(A,B)' - 文档格式被破坏,恐怕所以我写了正确的格式这里有一个新的类型参数'C'。所以你把一个函数从(key,value)的元组传递给任何其他有序的值。 'map.maxBy(_._ 2)'然后就是'map.maxBy {case(key,value)=> value}'的简写形式。 –