- Операции записи коллекций
- Добавление элементов
- Удаление элементов
- Обновление элементов
- Collection write operations
- Adding elements
- Removing elements
- Updating elements
- Remove an item from Array in Kotlin
- Remove an item from Mutable List in Kotlin
- Массивы и Cписки в Kotlin — Полное Руководство
- Массивы в Kotlin
- Что такое массив?
- Когда лучше использовать массивы?
- Создание массивов в Kotlin
- Массивы примитивных типов IntArray, FloatArray, DoubleArray
Операции записи коллекций
Изменяемые коллекции поддерживают операции, изменяющие её содержимое, например, операции по добавлению и удалению элементов. В этом разделе описаны операции записи, доступные для всех реализаций MutableCollection . Более конкретные операции, доступные для List и Map , описаны в разделах List: специфичные операции и Map: специфичные операции.
Добавление элементов
Чтобы добавить один элемент в список или множество ( Set ), используйте функцию add() . Указанный объект будет добавлен в конец коллекции.
Функция addAll() добавляет все элементы из переданного в качестве аргумента объекта в список или множество. Аргументом может быть Iterable , Sequence , или Array . Типы объекта-получателя и аргумента могут быть разными, например, вы можете добавить все элементы из Set в List .
При вызове к списку addAll() добавляет новые элементы в том же порядке, в котором они находятся в коллекции-аргументе. Вы также можете передать addAll() позицию, в которую будет вставлен первый элемент из коллекции-аргумента. За ним последуют другие элементы из коллекции-аргумента, сдвигая элементы коллекции-получателя в конец.
Вы также можете добавлять элементы, используя in-place версию оператора plus — plusAssign ( += ). При применении к изменяемой коллекции += добавляет второй операнд (элемент или другую коллекцию) в конец коллекции.
Удаление элементов
Чтобы удалить элемент из изменяемой коллекции, используйте функцию remove() . Она принимает значение элемента в качестве аргумента и удаляет из коллекции одно вхождение этого значения.
Для одновременного удаления нескольких элементов существуют следующие функции:
- removeAll() — удаляет все элементы, присутствующие в коллекции-аргументе. В качестве альтернативы вы можете вызвать её с предикатом; в этом случае функция удаляет все элементы, для которых предикат возвращает true .
- retainAll() — противоположность removeAll() : удаляет все элементы кроме тех, что находятся в коллекции-аргументе. При использовании с предикатом она оставляет только те элементы, которые ему соответствуют.
- clear() — удаляет все элементы из списка, оставляя его пустым.
fun main() < val numbers = mutableListOf(1, 2, 3, 4) println(numbers) // [1, 2, 3, 4] numbers.retainAll < it >= 3 > println(numbers) // [3, 4] numbers.clear() println(numbers) // [] val numbersSet = mutableSetOf("one", "two", "three", "four") numbersSet.removeAll(setOf("one", "two")) println(numbersSet) // [three, four] >
Еще один способ для удаления элементов из коллекции — оператор minusAssign ( -= ) — это in-place версия оператора minus . Второй аргумент может быть либо одним элементом, либо другой коллекцией. Если второй аргумент — это элемент, то оператор -= удалит первое вхождение этого элемента. Если же второй аргумент — это коллекция, то будут удалены все вхождения её элементов. Например, если список содержит повторяющиеся элементы, то они все будут удалены. Второй операнд может содержать элементы, которых нет в коллекции. Такие элементы не влияют на выполнение операции.
Обновление элементов
Списки и ассоциативные списки также предоставляют операции для обновления элементов. Они описаны в разделах List: специфичные операции и Map: специфичные операции. Для Set обновление элементов не имеет смысла, поскольку фактически он удаляет элемент и добавляет другой.
© 2015—2023 Open Source Community
Collection write operations
Mutable collections support operations for changing the collection contents, for example, adding or removing elements. On this page, we’ll describe write operations available for all implementations of MutableCollection . For more specific operations available for List and Map , see List-specific Operations and Map Specific Operations respectively.
Adding elements
To add a single element to a list or a set, use the add() function. The specified object is appended to the end of the collection.
addAll() adds every element of the argument object to a list or a set. The argument can be an Iterable , a Sequence , or an Array . The types of the receiver and the argument may be different, for example, you can add all items from a Set to a List .
When called on lists, addAll() adds new elements in the same order as they go in the argument. You can also call addAll() specifying an element position as the first argument. The first element of the argument collection will be inserted at this position. Other elements of the argument collection will follow it, shifting the receiver elements to the end.
You can also add elements using the in-place version of the plus operator — plusAssign ( += ) When applied to a mutable collection, += appends the second operand (an element or another collection) to the end of the collection.
Removing elements
To remove an element from a mutable collection, use the remove() function. remove() accepts the element value and removes one occurrence of this value.
For removing multiple elements at once, there are the following functions :
- removeAll() removes all elements that are present in the argument collection. Alternatively, you can call it with a predicate as an argument; in this case the function removes all elements for which the predicate yields true .
- retainAll() is the opposite of removeAll() : it removes all elements except the ones from the argument collection. When used with a predicate, it leaves only elements that match it.
- clear() removes all elements from a list and leaves it empty.
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 >
Another way to remove elements from a collection is with the minusAssign ( -= ) operator – the in-place version of minus . The second argument can be a single instance of the element type or another collection. With a single element on the right-hand side, -= removes the first occurrence of it. In turn, if it’s a collection, all occurrences of its elements are removed. For example, if a list contains duplicate elements, they are removed at once. The second operand can contain elements that are not present in the collection. Such elements don’t affect the operation execution.
Updating elements
Lists and maps also provide operations for updating elements. They are described in List-specific Operations and Map Specific Operations. For sets, updating doesn’t make sense since it’s actually removing an element and adding another one.
Remove an item from Array in Kotlin
In this post, we are going to explain different methods that can be used to delete elements from an array using Kotlin. We will be converting the array to a mutable list to delete items from array.
fun removeElement(arr: Array, itemIndex: Int): Array < val arrList = arr.toMutableList() arrList.removeAt(itemIndex) return arrList.toTypedArray() >fun main() < var fruits = arrayOf("Apple", "Banana", "Orange", "Papaya") // Remove second element from array fruits = removeElement(fruits, 2) println(fruits.contentToString()) >
We have created an array called fruits that contain multiple items. We want to delete an item that has an index 2. To remove the item we have created a function named ‘removeElement‘. In this function, we are taking two parameters. First is the array from where you want to delete the item. The second is the index of the item that needs to be removed.
We are converting the array to a mutable list using the .toMutableList() function and using removeAt() function of the mutable list, we are removing the item.
Remove an item from Mutable List in Kotlin
If we have a mutable list then we can easily remove the item from it. The mutable list has a function removeAt() that takes the index as a parameter and removes that item from the Mutable List.
fun main() < val mList = mutableListOf(10, 20, 30, 40, 50, 60) mList.removeAt(3) println(mList) >
Массивы и Cписки в Kotlin — Полное Руководство
Коллекции представляют собой гибкие «контейнеры», которые позволяют хранить вместе любое количество значений. Двумя самыми популярными типами коллекций являются массивы и списки.
Массивы в Kotlin
Массив в Kotlin соответствует базовому типу массива в Java. Массивы являются типизированными, как обычные переменные и константы, и они могут хранить много значений.
Перед созданием первого массива давайте подробнее рассмотрим, что из себя представляет массив и зачем он используется.
Что такое массив?
Массив является упорядоченной коллекцией значений одного типа. У элементов в массиве нулевая индексация. Это означает, что индекс первого элемента равен 0, индекс второго элемента равен 1 и так далее. Зная это, вы можете определить, что индекс последнего элемента будет на 1 меньше общего числа значений в массиве.
В данном массиве пять элементов с индексами от 0 до 4.
Все его значения имеют тип String , поэтому в массив, содержащий только строки, нельзя добавить значения другого типы кроме строк . Обратите внимание, что одно и то же значение может встречаться несколько раз.
Когда лучше использовать массивы?
Массивы пригодятся при необходимости хранить элементы в определенном порядке. Элементы можно будет отсортировать или сделать их выборку по индексу без итерации по всему массиву.
К примеру, при хранении данных о спортивных рекордах, порядок очень важен. Наивысший балл должен быть первым в списке (его индекс 0), далее идет второй лучший балл и так далее.
Создание массивов в Kotlin
Самым простым способом создания нового массива является использование функции arrayOf() из стандартной библиотеки Kotlin. Таким образом можно быстро указать какие значения должен хранить массив.
Поскольку данный массив содержит только целые числа, Kotlin воспринимает evenNumbers как массив значений типа Int . Этот тип записывается как Array . Тип внутри угловых скобок определяет тип значений, которые может хранить массив. Именно тип компилятор будет использовать при добавлении элементов в массив.
Если вы попытаетесь добавить строку в массиве в котором только числа, то компилятор вернет ошибку, и код не скомпилируется. Такой синтаксис для типа массива является примером аргумента типа или дженерики, о котором вы узнаете подробнее в следующем уроке.
Также, возможно создать массив, у которого все значения будут значениями по умолчанию:
Подробнее о таком синтаксисе < 5 >мы поговорим в уроке о лямбдах.
Как и с любым другим типом, лучше объявлять массивы, которые не будут меняться, то есть как константы. Рассмотрим следующий массив:
Константа vowels является массивом из строк, значения которых изменить нельзя. Это правильно, потому что список гласных букв уже давно не менялся.
Массивы примитивных типов IntArray, FloatArray, DoubleArray
При использовании функции arrayOf() и создании массивов с типами вроде Array итоговый массив представляет собой список из объектов. В частности, если вы работаете в JVM, целочисленный тип будет упакован как класс Integer , а не как примитивный тип int . Использование примитивных типов по сравнению с их упакованными аналогами в виде классов потребляет меньше памяти и приводит к повышению производительности. К сожалению, вы не можете использовать примитивы со списками (которые рассматриваются в следующем разделе), поэтому решение, стоит ли это делать, нужно принимать для каждого отдельного случая.
Стандартная библиотека Kotlin содержит и другие функции, не только arrayOf() , которые позволяют создавать массивы, соответствующие массивам примитивных типов. К примеру, вы можете создать массив нечетных чисел следующим образом: