私にはこのブログを書く権限がない。

Twitterじゃ書ききれない何かを書くアレ

ScalaにおけるMapのimmutableとmutable

Scalaはじめました。Javaの面倒な要素を簡単にしていて使いやすいのはいいんだけど、Map(というかCollection)の仕様にはまったのでメモ。

immutableとmutable

Scalaはマルチパラダイム言語といい、手続き型ベースにも書けるし、関数型ベースにも書けるのが特徴である。関数型ベースに書きやすいように、通常Collection(MapやList等)は破壊が不可能なクラスとなっている。これを破壊不可能な(immutable)クラスという。
Scalaでは、破壊不可能クラスを使うことを推奨しているが、破壊不可能な方法を取るのが困難な場合がある。この場合、そのCollectionを破壊可能な(mutable)クラスとして宣言することで、解決できる。
immutableなMapを宣言する時は単純である。

val immutableMap = Map("K" -> "V");

mutableなMapを宣言する時は少しややこしい。

val mutableMap = collection.mutable.Map("K" -> "V");

imutableなMapをmutableなMapにDeeply Copy(Clone)

方法は単純であるが、ぐぐっても変な方法ばかりで、なかなか「コレだ!」というものが見つからない。結局、以下の方法が一番良さそうだ。

val mutableMap = collection.mutable.Map.empty[Any, Any] ++= immutableMap;

mutableなMapをimmutableなMapにDeeply Copy(Clone)

こちらの方法も単純であるが、ぐぐっても変な方法ばかりである。toMapメソッドの存在があまり知られていないのだろうか。

val immutableMap = mutableMap.toMap