web-dev-qa-db-ja.com

Scalaマップの値による最大キー値ペアの取得

キーと一緒にマップから最大値を取得しようとしています。例えば:

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

100が最大値である場合、( 'a'、100)をプルするにはどうすればよいですか?基本的にMap.maxを使用したいのですが、キーではなく値で検索します。

9
pmaurais

maxByは、キーと値のペアから値だけまでの関数で使用できます。

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

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

これはの短縮形です

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

探している最大値がマップに複数回存在する場合のわずかな変更:

// Find the entries with the max value in the map
val maxValue = map.maxBy(item => item._2)

// Filter the map and retain the entries with the max value
map.filter(item => item._2 == maxValue._2)
0
Victor