我已经在Swift中声明了一个字典,例如:private val nestedDictionary = mutableMapOf<String, MutableMap<String, MutableList<String>>>()
我现在想做的是写给嵌套字典。下面是我正在使用的代码。
nestedDictionary["First Layer"]["Second Layer"] = mutableListOf("Failing to Write")
我想做的是为[“ First Layer”]创建一个字典键,然后将值映射到其中。我该怎么办?
编辑:我当前拥有并收到此错误的代码:“表达式不能是选择器。”
答案 0 :(得分:2)
@Simulant的答案将覆盖"First Layer"
的现有值(如果有)。如果这不是您想要的,请使用getOrPut
:
nestedDictionary.getOrPut("First Layer", { mutableMapOf() })["Second Layer"] =
mutableListOf("Failing to Write")
答案 1 :(得分:0)
一些肮脏的解决方案:
nestedDictionary["First Layer"]?.put("Second Layer", mutableListOf("Failing to Write"))
// Map.get() is nullable
或
nestedDictionary["First Layer"] = mutableMapOf("Second Layer" to mutableListOf("Failing to Write"))
或
nestedDictionary["First Layer"]!! += "Second Layer" to mutableListOf("Failing to Write")
// throw exception if no "First Layer" in nestedDictionary.
答案 2 :(得分:0)
nestedDictionary["First Layer"]
可以返回非null
的值。因此,您无法链接nestedDictionary["First Layer"]["Second Layer"]
,因为这意味着存在nestedDictionary["First Layer"]
中存储的值。
您可以使用not null assertion operator强制执行代码。但是,如果KoltinNullPointerException
的值之前未初始化,则会得到nestedDictionary["First Layer"]
。
val nestedDictionary = mutableMapOf<String, MutableMap<String, List<String>>>()
nestedDictionary["First Layer"]!!["Second Layer"] = mutableListOf("possible to write")
结果
Exception in thread "main" kotlin.KotlinNullPointerException
at main(Main.kt:4)
这有效,因为它们之间的地图已初始化
val nestedDictionary = mutableMapOf<String, MutableMap<String, List<String>>>()
nestedDictionary["First Layer"] = HashMap()
nestedDictionary["First Layer"]!!["Second Layer"] = mutableListOf("possible to insert")
更清洁的解决方案是
val nestedDictionary = mutableMapOf<String, MutableMap<String, MutableList<String>>>()
nestedDictionary["First Layer"] = mutableMapOf("Second Layer" to mutableListOf("inserted"))