我想创建可变Map,其中包含字符串作为键,MutableList作为值。
val myMap = scala.collection.mutable.Map[String, MutableList]()
像这样:
mymap = Map("a" -> MutableList(1, 2, 3), "b" -> MutableList(5, 6, 7))
但是我试图创建它会引发错误:
scala> var myval = scala.collection.mutable.Map[String, scala.collection.mutable.MutableList]()
<console>:10: error: class MutableList takes type parameters
var myval = scala.collection.mutable.Map[String, scala.collection.mutable.MutableList]()
答案 0 :(得分:3)
MutableList[A]
需要一种类型的参数。您应该使用var
表示可变状态,而不是val
:
import scala.collection.mutable.{Map => MutableMap, MutableList}
var myMap = MutableMap[String, MutableList[Int]]()
myMap = MutableMap("a" -> MutableList(1, 2, 3), "b" -> MutableList(5, 6, 7))
答案 1 :(得分:0)
我不同意@ jarandaf关于var
和可变状态的观点:
你应该使用var作为可变状态,而不是使用val
对我来说,使用var
与使用可变数据结构是正交的。
像这样使用它没有任何问题:
scala> import scala.collection.mutable.{Map => MutableMap, MutableList}
scala> val myMap = MutableMap("a" -> MutableList(1, 2, 3), "b" -> MutableList(5, 6, 7))
你仍然可以改变地图的值(从不使用可变值作为关键,除非你想要一些有趣的调试)使用这样的变异:
scala> myMap.get("a").map(_ += 42)
scala> myMap
res1: MutableMap[String,MutableList[Int]] = Map("b" -> MutableList(5, 6, 7), "a" -> MutableList(1, 2, 3, 42))
实际上如果我使用var
我通常使用不可变数据结构,因为对我来说很少有理由同时使用var
和可变数据结构。
scala> var myMap2 = Map("a" -> List(1,2,3))
scala> myMap2 = myMap2.updated("a",myMap2("a") :+ 42)
myMap2: scala.collection.immutable.Map[String,List[Int]] = Map(a -> List(1, 2, 3, 42))