如何在Scala中将immutable.Map转换为mutable.Map?

Łuk*_*Lew 84 scala map scala-2.8

如何在Scala中将immutable.Map转换为mutable.Map,以便更新Map中的值?

Kev*_*ght 121

最干净的方法是使用mutable.Mapvarargs工厂.与该++方法不同,这使用了该CanBuildFrom机制,因此如果编写库代码以利用此功能,则有可能提高效率:

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

这是有效的,因为a Map也可以被视为一对Pairs.

  • 如果这是最干净的,那么集合库有问题;) (14认同)
  • `:_*`非常类似于类型归属,告诉编译器确切地指定给定表达式的类型.你可以在这里想到"采取这种顺序,并把它当作一些vararg params." (6认同)
  • 你能解释一下,你在传递参数时在第二行中使用了什么语法吗?结肠有什么作用? (2认同)
  • @matt使用别名导入可以使它更短一些,但是请记住,牺牲不变性对于Scala来说不是非常习惯,这并不是我想要通过使它看起来更简单来鼓励的事情。出于好奇,如果不通过复制,您还可以提出其他更干净的建议吗? (2认同)

Rex*_*err 40

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


Xav*_*hot 8

开始Scala 2.13,通过工厂建设者应用.to(factory)

Map(1 -> "a", 2 -> "b").to(collection.mutable.Map)
// collection.mutable.Map[Int,String] = HashMap(1 -> "a", 2 -> "b")
Run Code Online (Sandbox Code Playgroud)