首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Scala [String,MutableList]()

Scala [String,MutableList]()
EN

Stack Overflow用户
提问于 2015-08-06 05:53:56
回答 2查看 839关注 0票数 2

我想要创建可变地图,其中包含字符串作为键,MutableList作为值。

代码语言:javascript
复制
val myMap = scala.collection.mutable.Map[String, MutableList]()

就像这样:

代码语言:javascript
复制
mymap = Map("a" -> MutableList(1, 2, 3), "b" -> MutableList(5, 6, 7))

但是,当我试图创建它时,会引发错误:

代码语言:javascript
复制
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]()
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-06 06:03:37

MutableList[A]期望一种类型的计量器。您应该将var用于可变状态,而不是val

代码语言:javascript
复制
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))
票数 3
EN

Stack Overflow用户

发布于 2015-08-06 15:00:52

我不同意@jarandaf关于var和可变状态的观点:

您应该将var用于可变状态,而不是使用val。

对我来说,使用var与使用可变的数据结构是正交的。这样使用它一点问题都没有:

代码语言:javascript
复制
scala> import scala.collection.mutable.{Map => MutableMap, MutableList}
scala> val myMap = MutableMap("a" -> MutableList(1, 2, 3), "b" -> MutableList(5, 6, 7))

而且您仍然可以更改映射的值(从不,使用可变值作为键,除非您想要进行一些有趣的调试),可以使用这样的变异:

代码语言:javascript
复制
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这两个可变的数据结构。

代码语言:javascript
复制
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))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31847793

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档