比較の組み合わせ
CoddyのKotlinジャーニー「ロジックとフロー」セクションの一部。レッスン 37/63。
sortedWithを使用して比較関数を指定します。compareBy<String> { it.length }は単語の長さを比較し、長さが同じ場合は.thenBy { it }を連結して単語自体を比較します。後の比較キーは、それより前のすべてのキーが同順位の場合にのみ使用されます。
mainの中:
val order = compareBy<String> { it.length }.thenBy { it }
println(listOf("bb", "a", "aa").sortedWith(order))長さによってまず a が先になります。2文字の同順位はアルファベット順の比較で決まります。
thenByは、先に指定した比較キーを置き換えずに同順位を解消します。
チャレンジ
中級パラメータ words: List<String> を持つ wordOrder を完成させてください。小文字の ASCII 単語を長さの昇順で並べ、長さが同じ場合はアルファベット順に並べ替えます。
上記でより厳しい上限が示されていない限り、コレクションは各レベルで最大 100 個の要素を含み、整数引数および整数コレクション値は -1000 から 1000 の範囲です。解析対象のテキストには、説明されているように無効または範囲外の表現が含まれる場合があります。
型 List<String> の値を返してください。提供されている入力/出力コードはそのまま使用してください。スカラー引数は 1 行に 1 つずつ読み取られます。リストは個数の後にその要素が続き、マップはエントリ数の後に各キーと値が続きます。ネストされたリストでは、各行について個数と要素の形式が繰り返されます。提供されている main は、戻り値の後に改行を 1 つ出力します。リストには Kotlin の標準的な角括弧形式を使用し、追加のラベルは出力しないでください。
自分で試してみよう
fun wordOrder(words: List<String>): List<String> {
// ここに解答を書いてください。
return emptyList()
}
fun main() {
val wordsCount = readln().toInt()
val words = mutableListOf<String>()
for (i0 in 0 until wordsCount) {
val wordsItem = readLine().orEmpty()
words.add(wordsItem)
}
println(wordOrder(words))
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
ロジックとフローのすべてのレッスン
自分で練習してみよう: Kotlinプレイグラウンド