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

前端 未结 1 844
佛祖请我去吃肉
佛祖请我去吃肉 2020-12-08 04:23

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?

1条回答
  •  無奈伤痛
    2020-12-08 04:54

    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)

    0 讨论(0)
提交回复
热议问题