Scala:迭代可变的地图地图

时间:2016-02-10 09:33:30

标签: scala

我已经定义了一个可变的地图地图

def parse_elem("true"),  do: true
def parse_elem("false"), do: false
def parse_elem(int),     do: String.to_integer(int)

apply(&linear/5, Enum.map(my_list, &parse_elem/1)

我在

中填充/更新
import scala.collection.mutable.Map

val default = Map.empty[String, Int].withDefaultValue(0)
val count = Map.empty[Any, Map[String, Int]].withDefaultValue(default)

如何迭代count("furniture")("table") += 1 count("furniture")("chair") = 6 count("appliance")("dishwasher") = 1 中的所有项目?为什么count会返回一个空的count.keys

2 个答案:

答案 0 :(得分:0)

您的方法存在一些问题:

问题#1:

val default = Map.empty[String,Int].withDefaultValue(0)

定义值default。该值只有一个实例,因此无法更改,因为您定义为val

这意味着您的count地图的默认值始终与空地图的实例相同。由于count为空,count("furniture")count("appliance")default完全相同。

问题#2:

withDefaultValue不会向地图添加条目,只会返回未定义密钥的默认值。

请参阅@mavarazys回答

答案 1 :(得分:0)

默认情况下,如果集合中不存在任何值,则不会创建新Map,它只返回此类请求的默认值,并对此默认值执行其他更改。

count("furniture")("table") += 1
count("furniture")("chair") = 6
count("appliance")("dishwasher") = 1

count("banana") // will return Map with "table", "chair" & "dishwasher"

等同于

default("table") += 1
default("chair") = 6
default("dishwasher") = 1

由于您在任何键上返回此默认值,因此每次调用都会返回此默认映射。

您的代码将按此工作。

count("furniture") = Map.empty[String, Int].withDefaultValue(0)
count("appliance") = Map.empty[String, Int].withDefaultValue(0)

count("furniture")("table") += 1
count("furniture")("chair") = 6
count("appliance")("dishwasher") = 1