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