Map

Scalaのコレクションフレームワークにおける「Map」は、キー(key)と値(value)のペアを管理するデータ構造であり、他の多くの言語における連想配列(または辞書)に相当します。以下に詳細を説明します。


1. 基本概念

Map[K, V]は、キー型Kと値型Vを持つコレクションです。キーは一意であり、同じキーに異なる値を対応させることはできません。

scala
val capitals = Map("Japan" -> "Tokyo", "France" -> "Paris", "Germany" -> "Berlin")

この例では、各国名(キー)に首都(値)が対応づけられています。


2. イミュータブルとミュータブル

Scalaには2種類のMapがあります。

種類 説明
scala.collection.immutable.Map(デフォルト) 不変(イミュータブル)で、一度作成すると変更できない
scala.collection.mutable.Map 可変(ミュータブル)で、キーや値の追加・削除が可能

例(ミュータブルMap):

scala
import scala.collection.mutable val scores = mutable.Map("Alice" -> 90, "Bob" -> 80) scores("Charlie") = 85 // 新しいキーと値を追加

3. 要素へのアクセス

要素を取得するには、キーを使ってアクセスします。

scala
val tokyo = capitals("Japan") // "Tokyo"

ただし、存在しないキーを指定するとNoSuchElementExceptionが発生します。そのため、安全な方法としてgetメソッドを使用することができます。

scala
val maybeCapital = capitals.get("Italy") // Some(value) または None

4. Mapの操作メソッド

ScalaのMapは高階関数も多く備えています。

メソッド 説明
+, - 要素の追加・削除(イミュータブルMapでも可)
updated 指定キーの値を更新
map, filter 条件による変換や絞り込み
keys, values キーまたは値だけを取得

例:

scala
val updatedCapitals = capitals + ("Italy" -> "Rome") val filtered = capitals.filter { case (country, _) => country.startsWith("J") }

5. 反復処理

Mapはfor式などでループ処理が可能です。

scala
for ((country, capital) <- capitals) { println(s"The capital of $country is $capital") }

6. Mapとパターンマッチング

Mapはタプルの集合でもあるため、パターンマッチを使った処理がしやすいのも特徴です。

scala
capitals.foreach { case (country, capital) => println(s"$country => $capital") }

まとめ

  • Mapはキーと値のペアを格納するコレクション。

  • デフォルトはイミュータブルだが、ミュータブル版も存在。

  • 高階関数が使えるため、関数型スタイルで柔軟に操作可能。

  • 存在しないキーに対するアクセスには注意が必要。

生成日:2025/05/04