関連付けと平坦化
associateとflatMapを学びます
「関連付けと平坦化」はCoddyKit上の無料Kotlin Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはKotlin Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Kotlin Academyコースには全4レッスンが含まれています。
関連付けと平坦化
コレクションを扱う強力なツールをさらに2つ紹介します。associateファミリーの関数はリストからマップを作成し、flatMap/flattenは入れ子になったコレクションを1つのフラットなコレクションに変換します。
associateWith関数
associateWithは各要素をキーとして使い、ラムダ式でその値を計算してMapを生成します。
fun main() {
val words = listOf("a", "bb", "ccc")
val lengths = words.associateWith { it.length }
println(lengths)
}associateBy関数
associateByはその逆です。各要素からキーを計算し、要素自体を値として保持します。
data class User(val id: Int, val name: String)
fun main() {
val users = listOf(User(1, "Ann"), User(2, "Bob"))
val byId = users.associateBy { it.id }
println(byId[2]?.name)
}associate関数
汎用的なassociateでは、各要素に対してPairを返すことで、キーと値の両方を一度に構築できます。
fun main() {
val names = listOf("Ann", "Bob", "Cy")
val map = names.associate { it to it.length }
println(map)
}重複するキー
associate関数で2つの要素が同じキーを生成した場合は、最後の要素が優先されます。すべての要素を保持する必要がある場合は、キーが一意になるようにしてください。
fun main() {
val words = listOf("apple", "ant", "bee")
val byFirst = words.associateBy { it.first() }
println(byFirst)
}flatten関数
flattenはコレクションのコレクションを受け取り、1つのフラットなリストに結合します。
fun main() {
val nested = listOf(listOf(1, 2), listOf(3, 4), listOf(5))
val flat = nested.flatten()
println(flat)
}flatMap関数
flatMapは各要素をコレクションにマッピングし、その後、すべてのコレクションを1つのリストに平坦化します。mapとflattenを1つの手順で行う処理です。
fun main() {
val words = listOf("hi", "ok")
val chars = words.flatMap { it.toList() }
println(chars)
}入れ子になったデータへのflatMap
flatMapは、入れ子になった構造を1つの要素列に展開するのに適しています。
data class Team(val members: List<String>)
fun main() {
val teams = listOf(Team(listOf("Ann", "Bob")), Team(listOf("Cy")))
val everyone = teams.flatMap { it.members }
println(everyone)
}flatMapとmap
各要素から必ず1つの結果が生成される場合はmapを使います。各要素からコレクションが生成され、それらをすべて1つのフラットなリストに結合したい場合はflatMapを使います。
fun main() {
val numbers = listOf(1, 2, 3)
val mapped = numbers.map { listOf(it, it * 10) }
val flat = numbers.flatMap { listOf(it, it * 10) }
println("map: $mapped")
println("flatMap: $flat")
}associateとflatMapの組み合わせ
これらのツールはデータパイプラインで一緒に使われることがよくあります。入れ子になったデータを平坦化してから、すばやくアクセスできる検索用マップに関連付けます。
data class Order(val items: List<String>)
fun main() {
val orders = listOf(Order(listOf("pen", "ink")), Order(listOf("pen")))
val counts = orders.flatMap { it.items }.groupingBy { it }.eachCount()
println(counts)
}それぞれの使いどころ
リストからすばやく検索できるマップを作成するにはassociateBy/associateWithを使い、入れ子になったコレクションをまとめるにはflatMap/flattenを使います。構造化データを簡潔かつ明確に扱えるようになります。
クイックチェック
flatMapは何をしますか?
復習
associate、associateBy、associateWith(重複するキーがある場合は最後の要素が優先されます)を使ってマップを作成し、flattenとflatMapを使って入れ子構造を平坦化する方法を学びました。これで、データの変換、整理、集約、再構成に必要なコレクションのツールキットが完成しました。
よくある質問
「関連付けと平坦化」レッスンは無料ですか?
はい。「関連付けと平坦化」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Kotlin Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Kotlin Academyコースには全4レッスンが含まれています。
「関連付けと平坦化」で何を学びますか?
associateとflatMapを学びます ブラウザで直接実行するハンズオンコードでKotlin Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Kotlin Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのKotlin Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「関連付けと平坦化」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このKotlin Academyレッスンでコードを書いて実行できますか?
はい。すべてのKotlin Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- フィルタリングとマッピング
- グループ化と分割
- 集約
- 関連付けと平坦化