Dive into Ofuton

お布団に飛び込もう

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)
*/