Записать во вложенный словарь (Kotlin) - PullRequest
0 голосов
/ 28 декабря 2018

Я объявил словарь в Swift следующим образом: private val nestedDictionary = mutableMapOf<String, MutableMap<String, MutableList<String>>>()

Сейчас я пытаюсь написать вложенный словарь.Ниже приведен код, который я использую.nestedDictionary["First Layer"]["Second Layer"] = mutableListOf("Failing to Write")

Я пытаюсь создать словарный ключ для [«Первый слой»], а затем отобразить в нем значения.Как я могу это сделать?

Редактировать: код, который у меня есть в настоящее время и получает эту ошибку: «выражение не может быть селектором».

Ответы [ 3 ]

0 голосов
/ 28 декабря 2018

nestedDictionary["First Layer"] может возвращать не null значение.Таким образом, вы не можете связать nestedDictionary["First Layer"]["Second Layer"], поскольку это означает, что значение, хранящееся в nestedDictionary["First Layer"], существует.

Вы можете использовать оператор not null assertion для принудительного выполнения кода.Однако вы получите 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"))
0 голосов
/ 29 декабря 2018

@ Ответ Simulant перезапишет существующее значение для "First Layer", если оно есть.Если это не то, что вы хотите, используйте getOrPut:

nestedDictionary.getOrPut("First Layer", { mutableMapOf() })["Second Layer"] = 
    mutableListOf("Failing to Write")
0 голосов
/ 28 декабря 2018

Некоторое грязное решение:

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.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...