0Pricing
Kotlin Academy · レッスン

集約

sum、count、fold、reduceを学びます

「集約」はCoddyKit上の無料Kotlin Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはKotlin Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Kotlin Academyコースには全4レッスンが含まれています。

コレクションの集約

集約とは、コレクションを1つの値にまとめる処理です。Kotlinには、sum、count、average、maxなどの既製関数に加えて、汎用的なfoldとreduceが用意されています。

sumとaverage

sumは数値要素を合計し、averageはそれらの平均値をDoubleとして返します。

fun main() {
    val numbers = listOf(2, 4, 6, 8)
    println("Sum: ${numbers.sum()}")
    println("Average: ${numbers.average()}")
}

count

countは要素数を返します。必要に応じて、述語で要素を絞り込んでから数えることもできます。

fun main() {
    val numbers = listOf(1, 2, 3, 4, 5, 6)
    println("Total: ${numbers.count()}")
    println("Even count: ${numbers.count { it % 2 == 0 }}")
}

maxOrNullとminOrNull

最大値や最小値を安全に求めるには、maxOrNullとminOrNullを使います。これらは空のコレクションに対してnullを返します。

fun main() {
    val numbers = listOf(3, 7, 2, 9, 4)
    println("Max: ${numbers.maxOrNull()}")
    println("Min: ${numbers.minOrNull()}")
}

sumOfとmaxByOrNull

sumOfは各要素から選択した値を合計し、maxByOrNullは選択した値が最大になる要素を見つけます。

data class Item(val name: String, val price: Int)

fun main() {
    val items = listOf(Item("a", 10), Item("b", 30), Item("c", 20))
    println("Total price: ${items.sumOf { it.price }}")
    println("Most expensive: ${items.maxByOrNull { it.price }?.name}")
}

fold関数

foldは初期値から開始し、要素を1つの結果にまとめます。ラムダ式は、途中までの累積値と現在の要素を受け取ります。

fun main() {
    val numbers = listOf(1, 2, 3, 4)
    val total = numbers.fold(100) { acc, n -> acc + n }
    println(total)
}

foldで型を変更する

初期値を指定するため、foldではStringなど、任意の型の結果を構築できます。

fun main() {
    val words = listOf("Kotlin", "is", "fun")
    val sentence = words.fold("") { acc, w -> if (acc.isEmpty()) w else "$acc $w" }
    println(sentence)
}

reduce関数

reduceはfoldに似ていますが、最初の要素を累積値の開始値として使います。コレクションが空の場合は例外をスローし、型を変更することはできません。

fun main() {
    val numbers = listOf(1, 2, 3, 4)
    val product = numbers.reduce { acc, n -> acc * n }
    println(product)
}

foldとreduce

主な違いは次のとおりです。

  • foldは初期値を受け取り、空のコレクションでも動作し、異なる型を返せます。
  • reduceは最初の要素から開始し、空のコレクションでは失敗し、要素の型を維持します。
fun main() {
    val empty = emptyList<Int>()
    println(empty.fold(0) { acc, n -> acc + n })
    println("fold is safe on empty lists")
}

runningFoldとrunningReduce

累積値の途中経過をすべて取得したい場合は、runningFold(およびrunningReduce)を使うと、部分的な結果のリストが返されます。

fun main() {
    val numbers = listOf(1, 2, 3, 4)
    val sums = numbers.runningFold(0) { acc, n -> acc + n }
    println(sums)
}

集約関数の選び方

用途に合う場合は、専用関数(sum、count、average、maxOrNull)を使います。独自の組み合わせが必要な場合はfoldまたはreduceを使い、初期値や型の変更が必要なときはfoldを優先します。

クイックチェック

foldとreduceの主な違いは何ですか?

復習

sum、count、average、maxOrNull、sumOfによる集約と、汎用的なfold(初期値を指定でき、任意の型にでき、空のコレクションにも安全)およびreduce(最初の要素を初期値にする)を学びました。次は、マップを作成し、入れ子になったコレクションを平坦化します。

よくある質問

「集約」レッスンは無料ですか?

はい。「集約」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Kotlin Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Kotlin Academyコースには全4レッスンが含まれています。

「集約」で何を学びますか?

sum、count、fold、reduceを学びます ブラウザで直接実行するハンズオンコードでKotlin Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Kotlin Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのKotlin Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「集約」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このKotlin Academyレッスンでコードを書いて実行できますか?

はい。すべてのKotlin Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

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

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