sortByの使い方について質問です。
独自に作成したクラスを格納したリストがあるとします。
そのリストをクラス内の特定のプロパティでソートしたいと考えていました。
調べているとMutableList#sortBy
を使えば実現できそうだったのですが、リファレンスを見ても引数として何を渡すべきなのかよくわからなかったので質問させていただきました。
以下はリファレンスに載っていたコードと説明です。
(https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/sort-by.html)
kotlin
1inline fun <T, R : Comparable<R>> MutableList<T>.sortBy( 2 crossinline selector: (T) -> R?)
Sorts elements in the list in-place according to natural sort order of the value returned by specified selector function.
これは引数として「(T)を渡すとR?を返す関数」を渡すという意味で合ってますでしょうか?((T)がリストの要素のことな気はするのですがR?が何なのかよくわかっていない)
また、説明のところに「selector function」とあるのですがこれがどういう関数なのかもわかりません。(要素から何を基準にソートするか選ぶ関数的な意味として使われているのでしょうか...?)
試しに以下のようなコードを書いて実行してみると上手く動作はするのですがいまいち理解できていません。(名前と年齢のプロパティを持つPersonクラスを格納したリストを年齢でソート)
これは引数として「リストの要素を渡すと要素のプロパティ(age)を返す関数」を渡していることになると思うのですが、上記のリファレンスに対する自分の認識と違うことになります(Comparable<R>とやらを返していない)
kotlin
1fun main(){ 2 3 val list: MutableList<Person> = mutableListOf() 4 5 list.add(Person("Alice", 22)) 6 list.add(Person("Bob", 16)) 7 list.add(Person("Carol", 25)) 8 9 list.sortBy { it.age } 10 println(list) 11} 12 13data class Person(val name: String, val age: Int)
質問をまとめると以下の2点です。
- sortByの引数として何を渡すのが正しいのか?
- 「selector function」とはどういうものか?(どういう意味で使われているのか)
まだまだ勉強し始めたばかりなのでリファレンスの見方やkotlinの文法をしっかり理解できていないのが原因だとは思いますがよろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/28 09:51
2020/03/28 10:59
2020/03/28 13:23