Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how to sort a scala.collection.Map[java.lang.String, Int] by its values?

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?

like image 225
Jan Willem Tulp Avatar asked Jun 04 '10 09:06

Jan Willem Tulp


People also ask

Can you sort a map Scala?

Solution. You can also sort by value in ascending or descending order using sortWith : // low to high scala> ListMap(grades.


1 Answers

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)

like image 195
mkneissl Avatar answered Sep 18 '22 06:09

mkneissl