我已经定义了一个可变的地图地图
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
?
答案 0 :(得分:0)
您的方法存在一些问题:
val default = Map.empty[String,Int].withDefaultValue(0)
定义值default
。该值只有一个实例,因此无法更改,因为您定义为val
。
这意味着您的count
地图的默认值始终与空地图的实例相同。由于count
为空,count("furniture")
或count("appliance")
与default
完全相同。
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