【Kotlin/Android Studio】配列(list)をソート(並び替え)する方法!sort/sortBy/sortWith/reversed
この記事からわかること
- Kotlin/Android Studioで配列(リスト)を並び替えする方法
- sorted/sortメソッドの違いと使い方
- MutableListの並び替え方法
- reversed/reverseで降順にする
- sortedBy/sortByでオブジェクトを並び替える
- sortedWith/sortWithで並び替えの規則を指定
index
[open]
\ アプリをリリースしました /
友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-
posted withアプリーチ
環境
- Android Studio:Flamingo
- Kotlin:1.8.20
配列の並び替え:sorted
Kotlinで配列(リスト)を並び替えするにはsorted
メソッドを使用します。数値であれば昇順で自動で並び替えたリストを新しく生成し返します。
var list = listOf(10,4,5,1,2,7,9)
var sortedList = list.sorted()
print(sortedList) // [1, 2, 4, 5, 7, 9, 10]
文字列を並び替えることも可能です。
var list = listOf("G","E","C","B","A","F","D")
var sortedList = list.sorted()
print(sortedList) // [A, B, C, D, E, F, G]
MutableListの場合:sort
リストがミュータブル(可変)であればsort
メソッドを使用することができます。このメソッドは新しいリストを生成せず呼び出したリストを並び替えます。
var list = mutableListOf(10,4,5,1,2,7,9)
list.sort()
print(list) // [1, 2, 4, 5, 7, 9, 10]
ミュータブルでもsorted
メソッドは使用することができますがイミュターブルにリストにはsort
メソッドは使用できません。
var list = mutableListOf(10,4,5,1,2,7,9)
var sortedList = list.sorted()
print(sortedList) // [1, 2, 4, 5, 7, 9, 10]
降順にする:reversed/reverse
リストの並び順を逆にするにはreversed
メソッドを使用します。このメソッドは単純に現在の並び順を逆にするメソッドなので降順に並び替えるメソッドではないので注意してください。そのため降順に並び替えたい場合はsorted
で先に昇順に並び替える必要があります。
var list = listOf(10,4,5,1,2,7,9)
var sortedList = list.sorted().reversed()
print(sortedList) // [10, 9, 7, 5, 4, 2, 1]
MutableListの場合
ミュータブルの場合はreverse
メソッドが使用できるようになります。
var list = mutableListOf(10,4,5,1,2,7,9)
list.sort()
list.reverse()
print(list) // [10, 9, 7, 5, 4, 2, 1]
オブジェクトを並び替える:sortedBy/sortBy
リストの中身が単一のデータ型ではなくオブジェクトの場合はsortedBy
メソッドを使用します。引数に並び替え対象のプロパティを指定します。
val users = listOf(
User("ame", 25),
User("mahiro", 30),
User("takeru", 20)
)
val sortedByName = users.sortedBy { it.name }
val sortedByAge = users.sortedBy { it.age }
print(sortedByName) // [User(name=ame, age=25), User(name=mahiro, age=30), User(name=takeru, age=20)]
print(sortedByAge) // [User(name=takeru, age=20), User(name=ame, age=25), User(name=mahiro, age=30)]
MutableListの場合
ミュータブルの場合はsortBy
メソッドが使用できるようになります。
val users = mutableListOf(
User("ame", 25),
User("mahiro", 30),
User("takeru", 20)
)
users.sortBy { it.name }
print(users) // [User(name=ame, age=25), User(name=mahiro, age=30), User(name=takeru, age=20)]
users.sortBy { it.age }
print(users) // [User(name=takeru, age=20), User(name=ame, age=25), User(name=mahiro, age=30)]
並び替えの規則を指定する:sortedWith/sortWith
今までは昇順や降順で並び替えてきましたがsortedWith
/sortWith
メソッドを使用することで並び替えの基準を任意のものに指定することができます。例えば以下は文字列の長さによって並び替えをしています。
val list = listOf("Kotlin","Swift","Java","Objective-C")
val comparator: Comparator<String> = compareBy { it.length }
val lengthList = list.sortedWith(comparator)
print(lengthList) // [Java, Swift, Kotlin, Objective-C]
MutableListの場合
ミュータブルの場合はsortWith
メソッドが使用できるようになります。
val list = mutableListOf("Kotlin","Swift","Java","Objective-C")
val comparator: Comparator<String> = compareBy { it.length }
list.sortWith(comparator)
print(list) // [Java, Swift, Kotlin, Objective-C]
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。