【问题标题】:Write To Nested Dictionary (Kotlin)写入嵌套字典 (Kotlin)
【发布时间】:2019-05-26 11:55:15
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: android dictionary kotlin


    【解决方案1】:

    @Simulant 的答案将覆盖"First Layer" 的现有值(如果有的话)。如果这不是您想要的,请使用getOrPut

    nestedDictionary.getOrPut("First Layer", { mutableMapOf() })["Second Layer"] = 
        mutableListOf("Failing to Write")
    

    【讨论】:

      【解决方案2】:

      nestedDictionary["First Layer"] 可以返回非 null 值。所以你不能链接nestedDictionary["First Layer"]["Second Layer"],因为这意味着存储在nestedDictionary["First Layer"] 的值是存在的。

      您可以使用not null assertion operator 来强制执行您的代码。但是,如果之前未初始化 nestedDictionary["First Layer"] 的值,您将获得 KoltinNullPointerException

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

      【讨论】:

      • 赞成:我喜欢nestedDictionary["First Layer"]!!["Second Layer"] 的干净解决方案。
      • 如何将一个项目附加到 mutableMapOf["Second Layer"]/如果它尚不存在则创建它?
      【解决方案3】:

      一些肮脏的解决方案:

      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.
      

      【讨论】:

        猜你喜欢
        • 2016-12-12
        • 2019-04-14
        • 2018-10-27
        • 2021-04-23
        • 2015-06-06
        • 1970-01-01
        • 2014-02-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多