使用现有密钥(Scala)向HashMap添加键值对

使用现有密钥(Scala)向HashMap添加键值对,scala,Scala,我有下面的HashMap import collection.mutable.HashMap val map = mutable.HashMap("key" -> mutable.HashMap("key" -> "value", "key2" -> "value2"), "key2" -> mutable.HashM

我有下面的HashMap

import collection.mutable.HashMap
val map = mutable.HashMap("key" -> mutable.HashMap("key" -> "value",
                                                    "key2" -> "value2"),
                          "key2" -> mutable.HashMap("key" -> "value",
                                                    "key2" -> "value2"))
我怎样才能得到这张地图的样子

val map = mutable.HashMap("key" -> mutable.HashMap("key" -> "value",
                                                    "key2" -> "value2"),
                          "key2" -> mutable.HashMap("key" -> "value",
                                                    "key2" -> "value2",
                                                    "key3" -> "value3"),
                          "key3" -> mutable.HashMap("key" -> "value"))
在我的脑海里,它会是这样的,但我找不到正确的方法

map.get("key2").put("key3" -> "value3")
map.put("key3" -> ("key" -> "value3"))

最终,我想要一个易于转换为Json的结构,
put
方法不能处理
key->value
形式的参数。您必须使用
+
-运算符。另外
.get(key)
返回一个
选项
,因此您必须在其上映射
.map

map.get("key2").map(_ + "key3" -> "value3")
map += ("key3" -> mutable.HashMap("key" -> "value3"))
在第二行中,您还需要显式创建一个HashMap,否则它将与映射类型不匹配(
[String,HashMap]


这应该可以回答您的问题,但Yuval Itzhakov是对的,如果您的对象有固定的结构,那么使用case类和JSON序列化程序(如or)可能是一个好主意。

put方法不适用于
键->值形式的参数。您必须使用
+
-运算符。另外
.get(key)
返回一个
选项
,因此您必须在其上映射
.map

map.get("key2").map(_ + "key3" -> "value3")
map += ("key3" -> mutable.HashMap("key" -> "value3"))
在第二行中,您还需要显式创建一个HashMap,否则它将与映射类型不匹配(
[String,HashMap]

这应该可以回答您的问题,但Yuval Itzhakov是对的,如果您的对象有固定的结构,那么使用case类和JSON序列化程序(如or)可能是一个好主意。

您不能使用

map.get(“key2”).put(“key3”->“value3”)

因为它返回
选项
,需要两个参数,而不是元组。您需要首先通过调用
get
来展开值,然后像这样调用它:

map.get(“key2”).get.put(“key3”、“value3”)

但有更简单的方法可以向可变映射添加新值:

map("key3") = mutable.HashMap("key" -> "value", "key2" -> "value2") 
map("key2")("key3") = "value3"

// or 

map += ("key3" -> mutable.HashMap("key" -> "value", "key2" -> "value2"))
map("key2") += ("key3" -> "value3")
你不能使用

map.get(“key2”).put(“key3”->“value3”)

因为它返回
选项
,需要两个参数,而不是元组。您需要首先通过调用
get
来展开值,然后像这样调用它:

map.get(“key2”).get.put(“key3”、“value3”)

但有更简单的方法可以向可变映射添加新值:

map("key3") = mutable.HashMap("key" -> "value", "key2" -> "value2") 
map("key2")("key3") = "value3"

// or 

map += ("key3" -> mutable.HashMap("key" -> "value", "key2" -> "value2"))
map("key2") += ("key3" -> "value3")

为什么不使用case类和JSON序列化程序呢?Scala中有很多好的,为什么不使用case类和JSON序列化程序呢?斯卡拉有很多好的。谢谢。我现在明白了!非常感谢。我现在明白了!