Основы Kotlin: как добавить или установить элемент карты?
Я хотел бы добавить / установить элементы изменяемой карты с конкретными парами ключ-значение. До сих пор я понял, что могу добавлять новые элементы с помощью оператора плюс вместе с типом данных Pair:
var arr3:Map<Any, Any> = mutableMapOf()
arr3 += Pair("manufacturer", "Weyland-Yutani")
//also, the "to" operator works too:
//arr3 += ("manufacturer" to "Weyland-Yutani")
Однако я не смог узнать, как изменить или добавить новые пары ключ-значение:
arr3["manufacturer"] = "Seegson" // gives an error( Kotlin: No set method providing array access)
arr3["manufacturer"] to "Seegson" // compiles, but nothing is added to the array
Не могли бы вы описать, как это сделать?
2 ответа
Вы объявили изменчивым arr3
с явным типом Map<Any, Any>
, Map
) интерфейс не допускает мутаций. +=
Оператор создает новый экземпляр карты и изменяет переменную arr3
, Чтобы изменить содержимое карты, объявите arr3
как MutableMap
вот так:
var arr3:MutableMap<Any, Any> = mutableMapOf()
или более идиоматический
var arr = mutableMapOf<Any, Any>()
Обратите внимание, что обычно вам нужна изменяемая переменная var
или изменяемый тип экземпляра MutableMap
но из моего опыта редко оба.
Другими словами, вы можете использовать изменяемую переменную с неизменным типом:
var arr = mapOf<Any,Any>()
и использовать +=
оператор, чтобы изменить где arr
указывает на.
Или вы могли бы использовать MutableMap
с неизменным arr
переменная и изменить содержимое где arr
указывает на:
val arr = mutableMapOf<Any,Any>()
Очевидно, вы можете только изменить MutableMap
содержание. Так arr["manufacturer"] = "Seegson"
будет работать только с переменной, которая объявлена как таковая.
Что касается операций добавления / установки, они могут выполняться на MutableMap<K, V>
(не просто Map<K, V>
) и может быть сделано несколькими способами:
Java-стиль
put
вызов:arr3.put("manufacturer", "Seegson")
Этот вызов возвращает значение, которое ранее было связано с ключом, или
null
,Более идиоматический вызов Kotlin с использованием
set
оператор:arr["matufacturer"] = "Seegson"
plusAssign
синтаксис оператора:arr += "manufacturer" to "Seegson"
Эта опция вводит накладные расходы
Pair
создан до вызова и менее читабелен, потому что его можно спутать сvar
переназначение (также, это не относится кvar
из-за неоднозначности), но все же полезно, когда у вас уже естьPair
что вы хотите добавить.