Kotlinのコレクション操作:リスト・セット・マップの効果的な使い方【Kotlin入門⑦】

コレクションとは?

Kotlinのコレクションは、複数の要素を効率的に管理するためのデータ構造です。主に以下の3種類のコレクションが存在します。

  • リスト(List):順序を持ち、重複を許可するコレクション
  • セット(Set):順序を持たず、重複を許可しないコレクション
  • マップ(Map):キーと値のペアで構成されるコレクション

Kotlinのコレクションは、イミュータブル(変更不可)とミュータブル(変更可能)なバージョンが用意されています。

リスト(List)の使い方

リストの基本操作

リストはlistOf()を使って作成できます(イミュータブル)。

val fruits = listOf("Apple", "Banana", "Cherry")
println(fruits[0]) // 出力: Apple

ミュータブルなリストを作成するにはmutableListOf()を使います。

val mutableFruits = mutableListOf("Apple", "Banana")
mutableFruits.add("Cherry")
println(mutableFruits) // 出力: [Apple, Banana, Cherry]

リストの便利な操作

リストは様々なメソッドを提供しています。

val numbers = listOf(1, 2, 3, 4, 5)
println(numbers.filter { it % 2 == 0 }) // 出力: [2, 4]
println(numbers.map { it * 2 }) // 出力: [2, 4, 6, 8, 10]
println(numbers.sortedDescending()) // 出力: [5, 4, 3, 2, 1]

セット(Set)の使い方

セットの基本操作

セットはsetOf()で作成し、重複する要素を自動的に排除します。

val uniqueNumbers = setOf(1, 2, 2, 3, 4)
println(uniqueNumbers) // 出力: [1, 2, 3, 4]

ミュータブルなセットを作成するにはmutableSetOf()を使います。

val mutableSet = mutableSetOf("A", "B")
mutableSet.add("C")
mutableSet.add("A") // 既に存在するため追加されない
println(mutableSet) // 出力: [A, B, C]

セットの便利な操作

val setA = setOf(1, 2, 3)
val setB = setOf(2, 3, 4)
println(setA.union(setB)) // 出力: [1, 2, 3, 4]
println(setA.intersect(setB)) // 出力: [2, 3]
println(setA.subtract(setB)) // 出力: [1]

マップ(Map)の使い方

マップの基本操作

マップはキーと値のペアで構成されるコレクションです。

val studentScores = mapOf("Alice" to 90, "Bob" to 85)
println(studentScores["Alice"]) // 出力: 90

ミュータブルなマップを作成するにはmutableMapOf()を使います。

val mutableStudentScores = mutableMapOf("Alice" to 90)
mutableStudentScores["Bob"] = 85
mutableStudentScores.put("Charlie", 88)
println(mutableStudentScores) // 出力: {Alice=90, Bob=85, Charlie=88}

マップの便利な操作

val scores = mapOf("Alice" to 90, "Bob" to 85, "Charlie" to 88)
println(scores.keys) // 出力: [Alice, Bob, Charlie]
println(scores.values) // 出力: [90, 85, 88]
println(scores.filterValues { it >= 88 }) // 出力: {Alice=90, Charlie=88}

コレクションの拡張関数

Kotlinではコレクションをより便利に操作するための拡張関数が多数用意されています。

forEachを使った要素の処理

val fruits = listOf("Apple", "Banana", "Cherry")
fruits.forEach { println(it) }

groupByを使ってリストを分類

val numbers = listOf(1, 2, 3, 4, 5, 6)
val grouped = numbers.groupBy { it % 2 == 0 }
println(grouped) // 出力: {false=[1, 3, 5], true=[2, 4, 6]}

partitionを使ってリストを2つに分割

val (even, odd) = numbers.partition { it % 2 == 0 }
println(even) // 出力: [2, 4, 6]
println(odd) // 出力: [1, 3, 5]

まとめ

本記事では、Kotlinのリスト・セット・マップの基本と便利な使い方について詳しく解説しました。

  • リスト(List) は順序を持ち、重複を許可する。
  • セット(Set) は順序を持たず、重複を許可しない。
  • マップ(Map) はキーと値のペアで構成される。

さらに、Kotlinの拡張関数を活用することで、コレクションの処理を効率的に行うことができます。