как да сортирате scala.collection.Map[java.lang.String, Int] по неговите стойности?

Как бихте сортирали scala.collection.Map[java.lang.String, Int] по неговите стойности (така на Int)? Какъв е краткият и елегантен начин да направите това?


person Jan Willem Tulp    schedule 04.06.2010    source източник


Отговори (1)


В зависимост от очаквания тип събиране на изход (SortedMaps са сортирани по ключовете), можете да използвате нещо подобно:

Map("foo"->3, "raise"->1, "the"->2, "bar"->4).toList sortBy {_._2}

Резултатът ще бъде списъкът с двойки ключ/стойност, сортирани по стойността:

List[(java.lang.String, Int)] = List((raise,1), (the,2), (foo,3), (bar,4))

Има тип карта, който запазва оригиналния ред, ListMap, ако приложите това, отново имате карта:

import collection.immutable.ListMap                                          
ListMap(Map("foo"->3, "raise"->1, "the"->2, "bar"->4).toList.sortBy{_._2}:_*)

След това имате:

scala.collection.immutable.ListMap[java.lang.String,Int] = Map((raise,1), (the,2), (foo,3), (bar,4))

(Scala 2.8)

person mkneissl    schedule 04.06.2010
comment
+10, наистина полезен, ListMap запазва реда след сортирането на списъка - person virtualeyes; 30.06.2012
comment
какво ще кажете за низходящ ред? - person vefthym; 17.03.2017
comment
@vefthym Map("foo"->3, "raise"->1, "the"->2, "bar"->4).toList sortWith {_._2 > _._2} - person Travis Hegner; 20.07.2017