値のグループ化
CoddyのKotlinジャーニー「ロジックとフロー」セクションの一部。レッスン 38/63。
groupByは、ラムダによって生成されたキーと、一致する要素のリストを値として持つマップを返します。各グループでは、そのメンバーの元の順序が保持されます。存在しないグループにアクセスすると、他のマップ検索と同様にnullが返されます。
main内:
val groups = listOf("a", "to", "b").groupBy { it.length }
println(groups[1])長さが1のグループには、元の順序のまま a と b が含まれます。
groupByは、計算されたキーごとに一致するすべての要素をリストに格納します。
チャレンジ
中級words: List<String>、length: Int をパラメータとして受け取る wordsOfLength を完成させてください。単語を長さごとにグループ化し、要求されたグループを元の順序で返してください。グループが存在しない場合は空のリストを返してください。
上記でより厳しい境界が示されていない限り、コレクションは各レベルで最大 100 個の要素を含み、整数の引数および整数コレクションの値は -1000 以上 1000 以下です。解析対象として提供されるテキストには、説明されている無効な表現や範囲外の表現が含まれる場合があります。
型 List<String> の値を返してください。提供されている入力/出力コードは変更しないでください。スカラー引数は 1 行に 1 つずつ読み取られます。リストは個数の後に要素が続き、マップはエントリ数の後に各キーと値が続きます。ネストされたリストでは、各行について個数と要素の形式が繰り返されます。提供されている main は、戻り値の後に改行を 1 つ出力します。リストには Kotlin 標準の角かっこ形式を使用し、追加のラベルは出力しないでください。
自分で試してみよう
fun wordsOfLength(words: List<String>, length: Int): 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)
}
val length = readln().toInt()
println(wordsOfLength(words, length))
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
ロジックとフローのすべてのレッスン
自分で練習してみよう: Kotlinプレイグラウンド