グループ化と分割
データを整理します
「グループ化と分割」はCoddyKit上の無料Kotlin Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはKotlin Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Kotlin Academyコースには全4レッスンが含まれています。
データの整理
コレクションをカテゴリに分ける必要がある場合があります。Kotlinには、キーごとに要素をまとめるgroupByと、条件に基づいて2つのリストに分けるpartitionがあります。
partition関数
partitionは、コレクションを2つのリストからなる<強調>Pair強調>に分割します。一方は述語に一致する要素、もう一方は一致しない要素のリストです。
fun main() {
val numbers = listOf(1, 2, 3, 4, 5, 6)
val (even, odd) = numbers.partition { it % 2 == 0 }
println("Even: $even")
println("Odd: $odd")
}Pairの分解
partitionはPairを返すため、上の例のように、2つの名前付き変数へ直接分解できます。また、.firstと.secondへアクセスすることもできます。
fun main() {
val result = listOf(10, -5, 3, -8).partition { it >= 0 }
println(result.first)
println(result.second)
}groupBy関数
groupByはMapを作成します。各キーはセレクターによって生成され、その値は同じキーを共有する要素のリストになります。
fun main() {
val words = listOf("apple", "banana", "avocado", "cherry")
val byFirstLetter = words.groupBy { it.first() }
println(byFirstLetter)
}計算したキーによるグループ化
キーには、文字列の長さや剰余など、計算によって求めた任意の値を使用できます。
fun main() {
val numbers = listOf(1, 2, 3, 4, 5, 6, 7)
val byRemainder = numbers.groupBy { it % 3 }
println(byRemainder)
}値の変換を伴うgroupBy
groupByは、各値をグループに入れる前に変換する2つ目のラムダ式を受け取れます。
fun main() {
val words = listOf("red", "rose", "blue", "berry")
val grouped = groupExample(words)
println(grouped)
}
fun groupExample(words: List<String>) =
words.groupBy({ it.first() }, { it.uppercase() })グループの反復処理
groupByはMapを返すため、エントリを反復処理して各グループを処理できます。
fun main() {
val animals = listOf("cat", "cow", "dog", "duck")
val groups = animals.groupBy { it.first() }
for ((letter, list) in groups) {
println("$letter -> $list")
}
}groupingByによるカウント
キーごとに要素を数える場合は、groupingByに続けてeachCountを使うと効率的で、コードの意図も明確になります。
fun main() {
val letters = listOf("a", "b", "a", "c", "b", "a")
val counts = letters.groupingBy { it }.eachCount()
println(counts)
}partitionとfilter
一致する要素だけが必要な場合は、filterを使います。一致する要素と一致しない要素の両方が必要な場合は、partitionを使うと1回の走査で両方のリストを取得できます。
fun main() {
val ages = listOf(15, 22, 17, 30, 12)
val (adults, minors) = ages.partition { it >= 18 }
println("Adults: $adults, Minors: $minors")
}groupByとpartitionの使い分け
yes/noの条件で定義されるバケットがちょうど2つの場合はpartitionを使います。あるプロパティをキーとして、多数のバケットに分けられる場合はgroupByを使います。
実践的なグループ化
グループ化と分割を使うと、冗長な手動ループをマップやリストに置き換えられます。意図を明確に表現でき、管理用の処理で起きるミスも減らせます。
クイックチェック
partitionは何を返しますか?
復習
条件に基づいて2つのリストに分けるpartition、キーに基づいてマップへまとめるgroupBy、さらにカウントに使うgroupingBy().eachCount()を学びました。次は、集約によってコレクションを1つの値にまとめます。
よくある質問
「グループ化と分割」レッスンは無料ですか?
はい。「グループ化と分割」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Kotlin Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Kotlin Academyコースには全4レッスンが含まれています。
「グループ化と分割」で何を学びますか?
データを整理します ブラウザで直接実行するハンズオンコードでKotlin Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Kotlin Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのKotlin Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「グループ化と分割」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このKotlin Academyレッスンでコードを書いて実行できますか?
はい。すべてのKotlin Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- フィルタリングとマッピング
- グループ化と分割
- 集約
- 関連付けと平坦化