web-dev-qa-db-ja.com

scala.collection.Map [Java.lang.String、Int]をその値でソートする方法は?

Scala.collection.Map [Java.lang.String、Int]をその値で(Intのように)どのようにソートしますか?それを行うための短くてエレガントな方法は何ですか?

33
Jan Willem Tulp

予想される出力コレクションタイプが何であるかに応じて(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)

55
mkneissl