33

How would you sort a scala.collection.Map[java.lang.String, Int] by its values (so on the Int)? What is a short and elegant way to do that?

Eugene Yokota
  • 94,654
  • 45
  • 215
  • 319
Jan Willem Tulp
  • 333
  • 1
  • 3
  • 4

1 Answers1

55

Depending on what the expected output collection type is (SortedMaps are sorted on the keys), you could use something like this:

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

Result would be the list of key/value pairs sorted by the value:

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

There is a Map type that retains the original order, ListMap, if you apply this, you have a map again:

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

Then you have:

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

(Scala 2.8)

mkneissl
  • 4,902
  • 2
  • 26
  • 28