Операции записи в коллекции
Изменяемые коллекции поддерживают операции изменения содержимого коллекции, например, добавление или удаление элементов. На этой странице мы опишем операции записи, доступные для всех реализаций 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
}
Обновление элементов
Списки и словари также предоставляют операции для обновления элементов. Они описаны в Операциях, специфичных для списков и Операциях, специфичных для словарей. Для множеств обновление не имеет смысла, так как это фактически удаление одного элемента и добавление другого.
© 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