Массивы используются для хранения нескольких элементов одного типа данных в одной переменной, например целое число или строка под одним именем переменной. Например, если нам нужно хранить имена 1000 сотрудников, то вместо создания 1000 различных строковых переменных мы можем просто определить массив строк емкостью 1000. Как и любой другой современный язык программирования, Kotlin также поддерживает массивы и предоставляет широкий спектр свойств массивов и функций поддержки для управления массивами.
Создание массивов
Чтобы создать массив в Kotlin, мы используем функцию arrayOf() и помещаем значения в список, разделенный запятыми, внутри него:
val fruits = arrayOf("Яблоко", "Манго", "Банан", "Апельсин")
При желании мы можем указать тип данных следующим образом:
val fruits = arrayOf<String>("Яблоко", "Манго", "Банан", "Апельсин")
В качестве альтернативы можно использовать функцию arrayOfNulls() для создания массива заданного размера, заполненного нулевыми элементами.
Массивы примитивного типа
В Kotlin также есть несколько встроенных методов для создания массивов примитивных типов данных. Например, метод для создания целочисленного массива:
val num = intArrayOf(1, 2, 3, 4)
val num = byteArrayOf(1, 2, 3, 4)
val num = charArrayOf('a', 'b', 'c', 'd')
val num = shortArrayOf(1, 2, 3, 4)
val num = longArrayOf(1, 2, 3, 4)
Записать и прочитать элементы массива
Мы можем получить доступ к элементу массива, используя номер индекса в квадратных скобках [ ]. Индекс массива Kotlin начинается с нуля 0. Поэтому, если вы хотите получить доступ к 4-му элементу массива, вам нужно указать 3 в качестве индекса.
fun main(args: Array<String>) {
val fruits = arrayOf<String>("Яблоко", "Манго", "Банан", "Апельсин")
println( fruits [0])
println( fruits [3])
}
Kotlin также предоставляет функции get() и set() для получения и установки значения по определенному индексу. Проверьте следующий пример:
fun main(args: Array<String>) {
val fruits = arrayOf<String>("Яблоко", "Манго", "Банан", "Апельсин")
println( fruits.get(0))
println( fruits.get(3))
// Установим значение третьего индекса
fruits.set(3, "Гуава")
println( fruits.get(3))
}
Длина массива
Kotlin предоставляет свойство массива size , которое возвращает размер, т.е. длину массива.
fun main(args: Array<String>) {
val fruits = arrayOf<String>("Яблоко", "Манго", "Банан", "Апельсин")
println( "Размер массива fruits " + fruits.size )
}
Мы также можем использовать функцию-член count() , чтобы получить размер массива.
Цикл через массив
Мы можем использовать цикл for для перебора массива.
fun main(args: Array<String>) {
val fruits = arrayOf<String>("Яблоко", "Манго", "Банан", "Апельсин")
for( item in fruits ){
println( item )
}
}
Проверить, существует ли элемент
Мы можем использовать оператор in вместе с if…else, чтобы проверить, существует ли элемент в массиве.
fun main(args: Array<String>) {
val fruits = arrayOf<String>("Яблоко", "Манго", "Банан", "Апельсин")
if ("Mango" in fruits){
println( "Манго есть в fruits" )
}else{
println( "Манго нет в fruits" )
}
}
Отдельные значения из массива
Kotlin позволяет хранить повторяющиеся значения в массиве, но в то же время вы можете получить набор разных значений (т.е. исключить повторения), хранящихся в массиве, с помощью функции different().
fun main(args: Array<String>) {
val fruits = arrayOf<String>("Яблоко", "Манго", "Банан", "Апельсин", "Яблоко")
val distinct = fruits.distinct()
for( item in distinct ){
println( item )
}
}
Удаление элементов из массива
Мы можем использовать функции drop() или dropLast() для удаления элементов с начала или с последнего соответственно.
fun main(args: Array<String>) {
val fruits = arrayOf<String>("Яблоко", "Манго", "Банан", "Апельсин", "Яблоко")
val result = fruits.drop(2) // Удалим первые два элемента
for( item in result ){
println( item )
}
}
Определение пустого массива
Мы можем использовать функцию isEmpty() , чтобы проверить, является ли массив пустым или нет. Эта функция возвращает true, если массив пуст.
fun main(args: Array<String>) {
val fruits = arrayOf<String>()
println( "Array is empty : " + fruits.isEmpty())
}
Полезные функции
var numbers.reverse() //перевернуть массив
var numbers.reversedArray() //перевернуть массив, но не трогает оригинал
var numbers.contentToString() //Преобразует массив в строку [5, 5, 5, 5]
var numbers.sort() //Сортировка от меньшего к большему
var numbers.sortedArray() //Сортировка от меньшего к большему, но не трогает оригинал
var numbers.sortDescending() //Сортировка от большего к меньшему
var numbers.sortedArrayDescending() //Сортировка от большего к меньшему, но не трогает оригинал
var numbers.shuffle() //перемешивает массив
var numbers.contains(6) //Содержит 6 или нет
var numbers.maxOrNull() //Наибольшее значение в массиве
var numbers.minOrNull() //Наименьшее значение в массиве
var numbers.sum() //Сумма всех значений в массиве
var numbers.average() //Среднее значений в массиве
var numbers.size //Размер массива
Все варианты создания массива
var numbers = arrayOf(4,9,0,6)
val numbers = arrayOf(4,9,"Но нельзя перезаписать",6)
var numbers:Array<Int> = arrayOf(4,9,0,6)
var numbers:IntArray = intArrayOf(4,9,0,6)
var numbers = IntArray(3) //= 0,0,0
var numbers = intArrayOf(0,0,0) //= 0,0,0
var numbers = arrayOfNulls<Int>(3) //= null,null,null
var numbers = emptyArray<String>() //= пустой массив, но он инициализирован
Находим общие элементы в двух массивах
Найдем общие элементы в двух массивах и создадим из них третий массив.
fun main(args: Array<String>) {
//Находим общие элементы, в данном случае это 3 и 1 и создаем новый массив
val arrayOrigin = arrayOf(9, 3, 5, 1, 0, 67, 11)
val arrayOrigin2 = arrayOf(1, 34, 7, 45, 56, 675, 3)
val resultArray = arrayOrigin.intersect(arrayOrigin2.toList()).toIntArray()
for(i in resultArray)
println(i)
}