我已经初始化了一个可变的Map(不确定是否应该在这里使用可变的,但首先要使用可变的):
val aKey = "aa"
val myMap = scala.collection.mutable.Map[String, List[String]]()
if (myMap.exists(_._1 == aKey))
myMap(aKey) = myMap.get(aKey) :: "test"
Run Code Online (Sandbox Code Playgroud)
但是myMap.get(aKey)我收到以下错误:
类型不匹配的预期列表[String]实际选项[String]
我认为我的做法正确地添加到列表中。
您可以使用添加到可变映射+=。
scala> myMap += ("placeholders" -> List("foo", "bar", "baz"))
res0: scala.collection.mutable.Map[String,List[String]] = Map(placeholders -> List(foo, bar, baz))
Run Code Online (Sandbox Code Playgroud)
将新项目添加到列表中,aKey如注释中所述。
myMap.get("placeholders") match {
case Some(xs:List[String]) => myMap.update("placeholders", xs :+ "buzz")
case None => myMap
}
res22: Any = ()
scala> myMap
res23: scala.collection.mutable.Map[String,List[String]] = Map(placeholders -> List(foo, bar, baz, buzz))
Run Code Online (Sandbox Code Playgroud)
一切安好。除了列表追加运算符
向列表中添加一个元素。操作员应该是这样的
myList = element :: myList
myList = myList :: element // wrong
Run Code Online (Sandbox Code Playgroud)
所以你的程序应该是
val aKey = "aa"
var myMap = scala.collection.mutable.Map[String, List[String]]().withDefaultValues(List())
myMap(aKey) = "test" :: myMap(aKey)
Run Code Online (Sandbox Code Playgroud)
如果您有可变的 Map且该映射内有不可变的 List。这是一个关于如何执行此操作的简单示例。该示例还使用withDefaultValue进行定义- 以便您始终从Map中获取一些内容。
var posts: collection.mutable.Map[Int, List[String]] = collection.mutable.Map().
withDefaultValue List.empty[String]
def addTag(postID: Int, tag: String): Unit = posts.get(postID) match {
case Some(xs: List[String]) => posts(postID) = xs :+ tag
case None => posts(postID) = List(tag)
}
posts(42)
// List[String] = List()
addTag(42, "tag-a")
addTag(42, "tag-b")
addTag(42, "tag-c")
posts(42)
// List[String] = List(tag-a, tag-b, tag-c)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6554 次 |
| 最近记录: |