0Pricing
Kotlin Academy · レッスン

グループ化と分割

データを整理します

「グループ化と分割」は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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. フィルタリングとマッピング
  2. グループ化と分割
  3. 集約
  4. 関連付けと平坦化
← Kotlin Academyに戻る