web-dev-qa-db-ja.com

KotlinでLinkedHashMapを値で並べ替える方法

使用できるキーでソートするには

map.toSortedMap()

しかし、LinkedHashMapをKotlinの値で並べ替える最良の方法は何ですか?

15
diesersamat
map.toList()
    .sortedBy { (key, value) -> value }
    .toMap()
30
Alex Filatov

Alex Filatov の答えへの追加:

最初の引数は空白のままにすることができます( Kotlin 1.1以降

_map.toList().sortedBy { (_, value) -> value }.toMap()
_

または、参照構文を使用できます

_map.toList().sortedBy(Pair<*, String>::second).toMap()
_

結果をすぐに繰り返し処理したい場合は、toMap()を呼び出す必要さえありません。リストの各ペアを次のように分解できるためです。

_map.toList().sortedBy(Pair<*, String>::second).forEach { (key, value) ->
   // ...
}
_
2
Willi Mentzel

あなたが複雑な答えを受け入れた理由は私にはありません。

var mapImmutable = mapOf<Int, Int>(1 to 11, 2 to 22, 3 to 33)

println(mapImmutable.toSortedMap(compareByDescending { mapImmutable[it] })) //{3=33, 2=22, 1=11}

mapImmutable[it]は値です
compareBy関数に渡すだけです

0
vikas