Как добавить элемент с тем же первым ключом на карту и сохранить там каждый элемент?

«»»

        var records = mutableMapOf<Int, Map<Int, List<String>>>()
        records.put(1, mutableMapOf(Pair(2, listOf<String>("first"))))
        records.put(1, mutableMapOf(Pair(3, listOf<String>("second"))))

«»»

0
M G 2 Май 2021 в 18:44

1 ответ

Лучший ответ

Карты могут иметь только одно значение для каждого ключа, если вы добавите еще одну запись с ключом, который уже существует, он перезапишет ее. Вам нужен тип значения, представляющий собой коллекцию (например, List или Set), в который вы можете поместить несколько вещей.

Предполагая, что вы хотите использовать ключи Int для хранения элементов, которые являются Pair<Int, String>, вам понадобится MutableMap<Int, MutableList<Pair<Int, String>>> (или Set, вы не получите дубликатов, и он неупорядочен обычно).

Вам нужно get коллекцию для ключа, а затем добавить к ней (или что вы делаете):

var records = mutableMapOf<Int, MutableList<Pair<Int, String>>>()
// this creates a new empty list if one doesn't exist for this key yet
records.getOrPut(1) { mutableListOf() }.add(Pair(2, "first"))
records.getOrPut(1) { mutableListOf() }.add(3 to "second") // another way to make a Pair
println(records)

>> {1=[(2, first), (3, second)]}

https://pl.kotl.in/AlrSG0KH-

Это немного многословно, поэтому вы можете создать несколько хороших функций addRecord(key, value) и т. Д., Которые позволят вам легче получить доступ к этим внутренним спискам.

1
cactustictacs 2 Май 2021 в 16:04