如何在Scala中通过预处理将列表转换为可变地图?

use*_*778 3 dictionary scala list

我有一个列表(列表的大小是可变的):

val ids = List(7, 8, 9)
Run Code Online (Sandbox Code Playgroud)

并希望获得以下地图:

val result= Map("foo:7:bar" -> "val1",
                "foo:8:bar" -> "val1",
                "foo:9:bar" -> "val1")
Run Code Online (Sandbox Code Playgroud)

映射中的所有内容都是硬编码的,除了id和值对于每个人来说都是相同的,但是映射必须是可变的,我想稍后再更新其值之一:

result("foo:8:bar") = "val2"
val result= Map("foo:7:bar" -> "val1",
                "foo:8:bar" -> "val2",
                "foo:9:bar" -> "val1")
Run Code Online (Sandbox Code Playgroud)

Jes*_*per 6

您可以这样操作:首先在列表上映射以生成元组列表,然后调用toMap结果,这将使元组成为不可变Map的:

val m = ids.map(id => ("foo:" + id + ":bar", "val1")).toMap
Run Code Online (Sandbox Code Playgroud)

然后不可改变转换Map为可变的Map,例如像解释在这里

val mm = collection.mutable.Map(m.toSeq: _*)
Run Code Online (Sandbox Code Playgroud)

编辑 - Map注释者注意到,中间不可变是不必要的,您也可以这样做:

val mm = collection.mutable.Map(ids.map(id => ("foo:" + id + ":bar", "val1")): _*)
Run Code Online (Sandbox Code Playgroud)

  • 这可以简化为`collection.mutable.Map(ids map {ix => s“ foo:$ ix:bar”->“ val1”}:_ *)` (7认同)