Основы 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 что вы хотите добавить.

Другие вопросы по тегам