【问题标题】:Scala Map[String, MutableList]()斯卡拉地图[字符串,可变列表]()
【发布时间】:2015-08-06 05:53:56
【问题描述】:

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

【问题讨论】:

    标签: list scala dictionary


    【解决方案1】:

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

    【讨论】:

    • 是的,通常 REPL 是你的朋友 ;)
    • 你能解释一下REPL吗??
    • 它是 Scala 解释器(通常称为 REPL 用于 Read-Evaluate-Print Loop)。如果您的路径中有scala,只需打开一个新终端,输入scala 并玩得开心。见scala-lang.org/download/install.html
    【解决方案2】:

    我不同意@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))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-25
      • 1970-01-01
      • 1970-01-01
      • 2018-12-07
      • 1970-01-01
      • 2011-01-22
      • 2011-03-13
      • 2012-01-07
      相关资源
      最近更新 更多