2016-09-26 4 views
6

Я пытаюсь вытащить максимальное значение из карты вместе с ее ключом. Например:Получение максимальной пары значений ключа в карте Scala по значению

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

Где 100 это наибольшее значение, как бы я идти о потянув ('а', 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 docs] (http://www.scala-lang.org/api/current/#scala.collection.Map), вы найдете для 'Map [A, B]': 'def maxBy [C] (f: ((A, B)) ⇒ C) (неявный cmp: Ordering [C]): (A, B) '- форматирование документа нарушено, я боюсь, поэтому я написал правильную форму здесь со свежим параметром типа 'C'. Таким образом, вы передаете функцию из кортежа (ключ, значение) в любое другое значение, для которого существует упорядочение. 'map.maxBy (_._ 2)' then - это просто краткая форма для 'map.maxBy {case (key, value) => value}'. –

Смежные вопросы