Освоюємо 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()}") // вивід значень масиву в один рядок
Результат:
[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
}
Результат:
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