2016-09-26 26 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}'的簡寫形式。 –