Шаг 129.
Основы Kotlin.
Ассоциативные массивы. Добавление записи в ассоциативный массив

    На этом шаге мы рассмотрим особенности выполнения этой операции.

    Ваш массив с золотом посетителей представляет кошельки Eli, Mordoc, Sophie, но не включает кошельки посетителей, которые были сгенерированы динамически. Настало время исправить это, заменив patronGold на MutableMap.

    Сделаем patronGold изменяемым ассоциативным массивом. Затем переберем в цикле элементы множества uniquePatrons и добавим записи о кошельках посетителей, положив в них по 6.0 золотых. Также удалите уже созданные записи, потому что с этого момента ключи будут содержать не только имена.

.   .   .   .
val patronList = mutablelistOf("Eli", "Mordoc", "Sophie")
val lastName = listOf("Ironfoot", "Fernsworth", "Baggins")
val uniquePatrons = mutableSetOf<String>()
val menuList = File("data/tavern-menu-items.txt")
        .readText()
        .split("\n")
val patronGold = mutableMapOf<String, Double>()

fun main() {
    .    .   .   .
    (0..9).forEach {
        val first = patronList.shuffled().first()
        val last = lastName.shuffled().first()
        val name = "$first $last"
        uniquePatrons += name
    }
    uniquePatrons.forEach {
        patronGold[it] = 6.0
    }
    .   .   .   .
}
.   .   .   .
Файл с проектом можно взять здесь.


Рис.1. Наполнение ассоциативного массива (Tavern.kt)

    Вы добавили в ассоциативный массив элемент для каждого уникального посетителя со значением в 6.0 золотых, совершив обход uniquePatrons. (Помните ключевое слово it? Здесь оно ссылается на элемент в uniquePatrons.)

    В таблице 1 перечислены наиболее часто применяемые функции для изменения содержимого изменяемого ассоциативного массива.

Таблица 1. Мутаторы ассоциативного массива
Функция Описание Пример
= (оператор присваивания) Добавляет или обновляет значение для указанного ключа в массиве val patronGold = mutableMapOf("Mordoc" to 6.0)
patronGold["Mordoc"] = 5.0
{Mordoc=5.0}
+= (оператор сложения с присваиванием) Добавляет или обновляет элемент или элементы в массиве в зависимости от операнда справа, который может быть элементом или ассоциативным массивом val patronGold = mutableMapOf("Mordoc" to 6.0)
patronGold += "Eli" to 5.0
{Mordoc=6.0, Eli=5.0}

val patronGold = mutableMapOf("Mordoc" to 6.0)
patronGold += mapOf("Eli" to 7.0,
     "Mordoc" to 1.0,
     "Jebediah" to 4.5)
{Mordoc=1.0, Eli=7.0, Jebediah=4.5}
put Добавляет или обновляет значение в массиве для указанного ключа val patronGold = mutableMapOf("Mordoc" to 6.0)
patronGold.put("Mordoc", 5.0)
{Mordoc=5.0}
putAll Добавляет все пары «ключ-значение», переданные в аргументе val patronGold = mutableMapOf("Mordoc" to 6.0)
patronGold.putAll(listOf(
     "Jebediah" to 5.0,
     "Sahara" to 6.0))
patronGold["Jebediah"]
5.0

patronGold["Sahara"]
6.0
getOrPut Добавляет запись с указанным ключом, если она не существует, и возвращает результат; иначе возвращает существующее значение val patronGold = mutableMapOf()
patronGold.getOrPut("Randy"){5.0}
5.0

patronGold.getOrPut("Randy"){10.0}
5.0
remove Удаляет запись из массива и возвращает значение val patronGold = mutableMapOf("Mordoc" to 5.0)
val mordocBalance = patronGold.remove("Mordoc")
{}

print(mordocBalance)
5.0
- (оператор вычитания) Возвращает новый массив без указанных записей val newPatrons = mutableMapOf("Mordoc" to 6.0,
     "Jebediah" to 1.0) - "Mordoc"
{Jebediah=1.0}
-= (оператор вычитания с присваиванием) Удаляет запись или записи из массива mutableMapOf("Mordoc" to 6.0,
     "Jebediah" to 1.0) -= "Mordoc"
{Jebediah=1.0}
clear Удаляет все записи из массива mutableMapOf("Mordoc" to 6.0,
     "Jebediah" to 1.0).clear()
{}

    На следующем шаге мы рассмотрим измение значений в ассоциативном массиве.




Предыдущий шаг Содержание Следующий шаг