マップ(Map)はいわゆる連想配列とか辞書とか呼ばれるデータ構造だ。
マップにはイミュータブルなマップと、ミュータブルなマップがある。なんで両方あるのかはわからない。
イミュータブルなマップ
Scala で単に Map と書くとイミュータブルなマップ(scala.collection.immutable.Map)になる。
scala> val m = Map("A" -> 1, "B" -> 2, "C" -> 3) m: scala.collection.immutable.Map[String,Int] = Map(A -> 1, B -> 2, C -> 3)
イミュータブルだから変更はできない。次のようにすると変更できるように見えるけど
scala> m.updated("B", 4) res0: scala.collection.immutable.Map[String,Int] = Map(A -> 1, B -> 4, C -> 3)
これは新しい値が返ってきているだけで、元の m は変更されていない。
scala> m res1: scala.collection.immutable.Map[String,Int] = Map(A -> 1, B -> 2, C -> 3)
ミュータブルなマップ
ミュータブルなマップ(scala.collection.mutable.Map)を使うには、こうする。
scala> import scala.collection.mutable import scala.collection.mutable scala> val m2 = mutable.Map("A" -> 1, "B" -> 2, "C" -> 3) m2: scala.collection.mutable.Map[String,Int] = Map(A -> 1, C -> 3, B -> 2)
キー B の値を変更してみよう。
scala> m2("B") = 5
すると、変数 m2 の値自体が変更されている。
scala> m2 res3: scala.collection.mutable.Map[String,Int] = Map(A -> 1, C -> 3, B -> 5)