Scala Map [String,MutableList]()

时间:2015-08-06 05:53:56

标签: list scala dictionary

我想创建可变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]()

2 个答案:

答案 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))