写嵌套词典(科特林)

时间:2018-12-28 17:32:28

标签: android dictionary kotlin

我已经在Swift中声明了一个字典,例如:private val nestedDictionary = mutableMapOf<String, MutableMap<String, MutableList<String>>>()

我现在想做的是写给嵌套字典。下面是我正在使用的代码。 nestedDictionary["First Layer"]["Second Layer"] = mutableListOf("Failing to Write")

我想做的是为[“ First Layer”]创建一个字典键,然后将值映射到其中。我该怎么办?

编辑:我当前拥有并收到此错误的代码:“表达式不能是选择器。”

3 个答案:

答案 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"))