KotlinでCollectionをソートするときのメモ
Mutableなやつ
sort()
sort()を使うとコレクション自身がソートされるので何も返ってこない点に注意。
val list = mutableListOf(5, 1, 3, 2, 4) list.sort() println(list) // [1, 2, 3, 4, 5]
SortedSetを使う
val set = sortedSetOf(5, 1, 3, 2, 4) println(set) // [1, 2, 3, 4, 5]
Immutableなやつ
sorted()を使う
ソートされたコレクションが返ってくる。
val array = listOf(5, 1, 3, 2, 4).sorted() println(array) // [1, 2, 3, 4, 5]
Pair<Int, Int>をソートする
sortedWith, compareByを使う
MutableなコレクションならsortWithでもOK。
val pairs = Array(10){ Random.nextInt(10) to Random.nextInt(10) }.sortedWith(compareBy({it.first}, {it.second})) println(pairs.joinToString("\n")) /* (0, 1) (1, 4) (1, 8) (2, 1) (5, 7) (5, 8) (7, 6) (8, 4) (9, 1) (9, 7) */
compareByは引数にセレクタを複数渡せる。 compareBy - Kotlin Programming Language
セレクタ1つで済むときはsortBy、sortedBy
val pairs = Array(10){ Random.nextInt(10) to Random.nextInt(10) }.sortedBy{it.second} println(pairs.joinToString("\n")) /* (9, 2) (9, 2) (7, 4) (3, 5) (2, 5) (7, 6) (4, 7) (9, 8) (6, 9) (0, 9) */