我怎样才能将immutable.Map转换为Scala中的mutable.Map?

我怎样才能转换immutable.Map在斯卡拉mutable.Map,所以我可以更新在Map中的值?

mutable.Map方法是使用mutable.Map可变参数工厂。 与++方法不同的是,它使用了CanBuildFrom机制,因此如果编写库代码来利用这一点,则可能会更有效率:

 val m = collection.immutable.Map(1->"one",2->"Two") val n = collection.mutable.Map(m.toSeq: _*) 

这是有效的,因为一个Map也可以看成是一个Pairs序列。

 val myImmutableMap = collection.immutable.Map(1->"one",2->"two") val myMutableMap = collection.mutable.Map() ++ myImmutableMap 

如何使用collection.breakOut?

 import collection.{mutable, immutable, breakOut} val myImmutableMap = immutable.Map(1->"one",2->"two") val myMutableMap: mutable.Map[Int, String] = myImmutableMap.map(identity)(breakOut) 

有一个变种创build一个空的可变的Map ,该Map具有从不可变的Map取得的默认值。 您可以随时存储一个值并覆盖默认值:

 scala> import collection.immutable.{Map => IMap} //import collection.immutable.{Map=>IMap} scala> import collection.mutable.HashMap //import collection.mutable.HashMap scala> val iMap = IMap(1 -> "one", 2 -> "two") //iMap: scala.collection.immutable.Map[Int,java.lang.String] = Map((1,one), (2,two)) scala> val mMap = new HashMap[Int,String] { | override def default(key: Int): String = iMap(key) | } //mMap: scala.collection.mutable.HashMap[Int,String] = Map() scala> mMap(1) //res0: String = one scala> mMap(2) //res1: String = two scala> mMap(3) //java.util.NoSuchElementException: key not found: 3 // at scala.collection.MapLike$class.default(MapLike.scala:223) // at scala.collection.immutable.Map$Map2.default(Map.scala:110) // at scala.collection.MapLike$class.apply(MapLike.scala:134) // at scala.collection.immutable.Map$Map2.apply(Map.scala:110) // at $anon$1.default(<console>:9) // at $anon$1.default(<console>:8) // at scala.collection.MapLike$class.apply(MapLike.scala:134).... scala> mMap(2) = "three" scala> mMap(2) //res4: String = three 

警告 (请参阅Rex Kerr的评论):您将无法移除来自不可变映射的元素:

 scala> mMap.remove(1) //res5: Option[String] = None scala> mMap(1) //res6: String = one