Spec-Zone.ru › Kotlin 1.8

Операции записи в коллекции

Изменяемые коллекции поддерживают операции для изменения содержимого коллекции, например, добавление или удаление элементов. На этой странице мы опишем операции записи, доступные для всех реализаций MutableCollection. Для более специфических операций, доступных для List и Map, см. Операции, специфичные для списков и Операции, специфичные для словарей соответственно.

Добавление элементов

Для добавления одного элемента в список или множество используйте функцию add(). Указанный объект добавляется в конец коллекции.

fun main() {
//sampleStart
    val numbers = mutableListOf(1, 2, 3, 4)
    numbers.add(5)
    println(numbers)
//sampleEnd
}

addAll() добавляет каждый элемент объекта-аргумента в список или множество. Аргумент может быть Iterable, Sequence, или Array. Типы получателя и аргумента могут быть разными, например, вы можете добавить все элементы из Set в List.

При вызове для списков addAll() добавляет новые элементы в том же порядке, как они идут в аргументе. Вы также можете вызвать addAll(), указав позицию элемента в качестве первого аргумента. Первый элемент коллекции-аргумента будет вставлен в эту позицию. Другие элементы коллекции-аргумента будут следовать за ним, смещая элементы получателя в конец.

fun main() {
//sampleStart
    val numbers = mutableListOf(1, 2, 5, 6)
    numbers.addAll(arrayOf(7, 8))
    println(numbers)
    numbers.addAll(2, setOf(3, 4))
    println(numbers)
//sampleEnd
}

Вы также можете добавлять элементы, используя ин-плейс версию оператора plus - plusAssign (+=). При применении к изменяемой коллекции, += добавляет второй операнд (элемент или другую коллекцию) в конец коллекции.

fun main() {
//sampleStart
    val numbers = mutableListOf("one", "two")
    numbers += "three"
    println(numbers)
    numbers += listOf("four", "five")    
    println(numbers)
//sampleEnd
}

Удаление элементов

Для удаления элемента из изменяемой коллекции используйте функцию remove(). remove() принимает значение элемента и удаляет одно вхождение этого значения.

fun main() {
//sampleStart
    val numbers = mutableListOf(1, 2, 3, 4, 3)
    numbers.remove(3)                    // removes the first `3`
    println(numbers)
    numbers.remove(5)                    // removes nothing
    println(numbers)
//sampleEnd
}

Для удаления нескольких элементов одновременно есть следующие функции:

  • removeAll() удаляет все элементы, присутствующие в коллекции-аргументе. В качестве альтернативы, вы можете вызвать ее с предикатом в качестве аргумента; в этом случае функция удаляет все элементы, для которых предикат возвращает true.

  • retainAll() — это противоположность removeAll(): она удаляет все элементы, кроме элементов из коллекции-аргумента. При использовании с предикатом, она оставляет только элементы, которые ему соответствуют.

  • clear() удаляет все элементы из списка и оставляет его пустым.

fun main() {
//sampleStart
    val numbers = mutableListOf(1, 2, 3, 4)
    println(numbers)
    numbers.retainAll { it >= 3 }
    println(numbers)
    numbers.clear()
    println(numbers)

    val numbersSet = mutableSetOf("one", "two", "three", "four")
    numbersSet.removeAll(setOf("one", "two"))
    println(numbersSet)
//sampleEnd
}

Другой способ удалить элементы из коллекции — с помощью оператора minusAssign (-=) — ин-плейс версия minus. Второй аргумент может быть одиночным экземпляром типа элемента или другой коллекцией. С одиночным элементом справа, -= удаляет первое вхождение. В свою очередь, если это коллекция, все вхождения ее элементов удаляются. Например, если список содержит дубликаты, они удаляются сразу. Второй операнд может содержать элементы, которые отсутствуют в коллекции. Такие элементы не влияют на выполнение операции.

fun main() {
//sampleStart
    val numbers = mutableListOf("one", "two", "three", "three", "four")
    numbers -= "three"
    println(numbers)
    numbers -= listOf("four", "five")    
    //numbers -= listOf("four")    // does the same as above
    println(numbers)    
//sampleEnd
}

Обновление элементов

Списки и словари также предоставляют операции для обновления элементов. Они описаны в Операциях, специфичных для списков и Операциях, специфичных для словарей. Для множеств обновление не имеет смысла, так как это фактически удаление элемента и добавление другого.

Последнее изменение: 10 января 2023 г.
Операции агрегирования Операции, специфичные для списков

© 2010–2023 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/collection-write.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API