Перейти до вмісту

Освоюємо Kotlin/Масиви

Матеріал з Вікіпідручника


Масиви - це впорядкований набір однотипних даних певного розміру. В Kotlin масиви поділяються на два види. Один вид - це об'єктного типу масиви на основі класу Array та масиви примітивних типів. Нумерація елементів масиву в Kotlin починається з нуля.

Одновимірні масиви

[ред.]

Якщо говорити про перший вид масивів, то їх можна створити з допомогою конструктора класу Array або з допомогою функцій arrayOf(), arrayOfNulls() або emptyArray(). Тему конструкторів, класів та об'єктів детально розписана в розділі про об'єктно-орієнтоване програмування. Для початку достатньо прийняти до уваги, що є такий спосіб створення масивів. Робота з масивами незалежить від того як вони створювались.

Приклад створення з конструктором:

val initArray: Array<Int> = Array<Int>(3) { 0 } //пустий масив з трьох елементів
val numbersArray = Array(5) { index -> index } //заповнити масив значеннями індексів, тобто (0,1,2,3,4)

Приклад створення масиву через функцію:

var m = arrayOf(1, 2, 3, 2, 10) // оголошення масиву з п'ятьма числами типу Int

Робота з масивами в Kotlin здійснюється наступним чином:

var myArray = arrayOf(1, 2, 3) // оголошення масиву з трьома числами типу Int
println(myArray[0]) // звернення до першого (нульового) елемента масиву
println (myArray.size) // отримання розміру масива
val myArray2=arrayOf<String>("Mariyka", "Pasha", "Kolya") // явне вказання типу масиву
val myArray2: Array<String> = arrayOf("Mariyka", "Pasha", "Kolya")// можна також так вказувати тип

Зверніть увагу, що після <String> в 5-му рядку ми ставимо пробіл, інакше компілятор видасть помилку про відсутність >

Звернення до масиву можна реалізувати двома способами: 1) з використанням квадратних дужок; 2) з використанням функцій get() та set():

val x:Array<Int>=arrayOf(1,3,5,6,3) // напис Array<Int> можна опустити
println ("[3]="+x.get(3)) // читаєм значення третьої комірки
println ("[4]="+x[4]) //читаємо значення четвертої комірки
x[2]=10 //змінюємо значення другої комірки на 10
x.set(3, 8) // змінюємо значення третьої комірки на 8
println("Змінений масив: ${x.joinToString()}") // вивід значень масиву в один рядок
Standard input or output Результат:
[3]=6
[4]=3
Змінений масив: 1, 3, 10, 8, 3

Рекомендованим є спосіб звернення через квадратні дужки.

Вивести вміст масиву на консоль можна так:

val myArray2: Array<String> = arrayOf("Mariyka", "Pasha", "Kolya")
println(myArray2.joinToString()) // Виведе: Mariyka, Pasha, Kolya

Можна створити пустий масив з певної кількості елементів, наприклад:

val myArray = Array(10) { "" } // масив з 10-ти елементів типу String, з пустими рядками
val nullableArray = arrayOfNulls<String>(10) //String масив з невизначеними значеннями (null)
val intArray = IntArray(10) //для цілих чисел можна так створити масив з десятьма нулями
val intArray = Array(10) { 0 } // те ж саме цілочисельний масив з десятьма нулями

Зверніть увагу на третій рядок. Всі базові (примітивні) типи мають свої реалізації масивів для ефективнішої роботи, тобто існує ByteArray, DoubleArray і т.п. Робота з ними дещо швидша. Так, масив цілих чисел типу IntArray можна задати так:

val x:IntArray=intArrayOf(1,3,5,6,3) //IntArray

Аналогічно працюємо і з іншими типами даних.

Якщо масив визначається не з допомогою ключового слова var, а з допомогою val, то створену змінну не можна буде перенаправити на інший масив. При цьому елементи масиву можна змінювати. Змінну масиву оголошену з var можна перенаправити на інший масив, але лише того ж типу, що і перший масив. Тобто, якщо початковий масив був Int, то можна перенаправити змінну лише на масив також Int типу.

Перебрати елементи масиву по порядку можна так:

val myArray2: Array<String> = arrayOf("Mariyka", "Pasha", "Kolya", "Nastya", "Ніна")
myArray2.forEach {
    println("Name: $it") // використовуємо ключове слово it
}
Standard input or output Результат:
Name: Mariyka
Name: Pasha
Name: Kolya
Name: Nastya
Name: Ніна

Інший спосіб перебрати масиви - це цикли (див. розділ «Цикли»)

Багатовимірні масиви

[ред.]

Двовимірний масив можна створити так:

val matrix = arrayOf(
    arrayOf(1, 2, 3),
    arrayOf(4, 5, 6),
    arrayOf(7, 8, 9)
)

Таким чином ми створили двовимірний масив (таблицю), де кожен внутрішній масив є рядком. Масив 3x4 з заповненням нулями можна створити так:

val array = Array(3) { Array(4) { 0 } }

Звернення до елементів двовимірного масиву:

val element = matrix[1][2]

Рядки в двовимірному масиві, при потребі, можуть мати різну довжину.

Щоб отримати кількість рядків (перший вимір), використовуйте array.size. Щоб отримати кількість стовпців (другий вимір) у конкретному рядку, використовуйте array[0].size.

Масиви з елементами змішаного типу

[ред.]

В Kotlin можна створити масив з елементами змішаного типу використовуючи тип Any:

val mixedTypeArray: Array<Array<Any>> = arrayOf(
    arrayOf("Ім'я", 25, true),
    arrayOf("Інше ім'я", 30, false)
)

Звернення елементів відбувається як і у звичайному багатовимірному масиві за індексами:

// Доступ до елементів
println(mixedTypeArray[0][0]) // Виведе: Ім'я
println(mixedTypeArray[0][1]) // Виведе: 25