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?
Asked
Active
Viewed 1.6k times
1 Answers
55
Depending on what the expected output collection type is (SortedMap
s 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
-
+10, seriously useful, ListMap preserves order post-List-sort – virtualeyes Jun 30 '12 at 03:06
-
what about descending order? – vefthym Mar 17 '17 at 08:08
-
@vefthym `Map("foo"->3, "raise"->1, "the"->2, "bar"->4).toList sortWith {_._2 > _._2}` – Travis Hegner Jul 20 '17 at 14:13