Прямые ссылки на публичные уроки для быстрого старта и стабильной индексации lesson-страниц.
Когда нужно работать с набором однотипных данных — искать, сортировать или выводить их списком — хранить каждый элемент в отдельной переменной неудобно:
val ingredient1 = "яйцо" val ingredient2 = "помидор" val ingredient3 = "зелень" val ingredient4 = "соль" val ingredient5 = "перец"
Такие данные лучше объединить в массив. Массив — это набор данных одного типа с фиксированной длиной, которая задаётся при инициализации и не может быть изменена.
Массив создаётся как обычная переменная с помощью функции arrayOf(), в параметры которой передаются значения одного типа через запятую:
val arrayOfIngredients = arrayOf("яйцо", "помидор", "зелень", "соль", "перец")
С явным указанием типа:
val arrayOfIngredients: Array<String> = arrayOf("яйцо", "помидор", "зелень", "соль", "перец")
Аналогично объявляются массивы других типов:
val intArray: Array<Int> = arrayOf(4, 4, 2) val charArray: Array<Char> = arrayOf('4', '4', '2')
Для числовых и символьных типов существуют специализированные функции:
val intArray1: IntArray = intArrayOf(4, 4, 2) val charArray1: CharArray = charArrayOf('4', '4', '2')
intArrayOf() допускает создание пустого массива без указания типа, тогда как arrayOf() в такой ситуации вызовет ошибку компиляции:
val intArray2 = arrayOf() // ошибка — тип не определён val intArray3 = intArrayOf() // OK — пустой IntArray
| Ключевое слово | Что можно делать |
|---|---|
val | Изменять значения внутри массива, но нельзя переприсвоить переменную новому массиву |
var | Изменять значения внутри массива и переприсваивать переменную новому массиву |
// val: нельзя пересоздать массив в той же переменной val intArray3 = intArrayOf(1, 2, 3, 4, 5) intArray3 = intArrayOf(1, 2, 3) // ошибка компиляции // var: пересоздание допустимо, прежний массив уничтожается var intArray3 = intArrayOf(1, 2, 3) intArray3 = intArrayOf(1, 2, 3, 4, 5) // OK
Изменять данные внутри массива (читать, обнулять, сортировать) можно при любом ключевом слове — это не пересоздание массива, а изменение содержимого уже существующего.
Размер массива доступен через свойство size:
println("Размер массива с ингредиентами: ${arrayOfIngredients.size}") // Размер массива с ингредиентами: 5
size — это свойство класса Array, в котором хранится информация о длине массива. Классы и свойства будут подробно разобраны в следующих уроках.
Каждый элемент массива имеет индекс — порядковый номер, начинающийся с нуля. Для массива из 5 элементов индексы: 0, 1, 2, 3, 4.
Получить индекс элемента:
println(arrayOfIngredients.indexOf("помидор")) // 1
Обратиться к элементу по индексу:
println(arrayOfIngredients[1]) // помидор println(arrayOfIngredients[2]) // зелень
Обращение к несуществующему индексу вызовет ошибку
ArrayIndexOutOfBoundsException.
Изменить значение элемента по индексу:
arrayOfIngredients[4] = "паприка" println(arrayOfIngredients[4]) // паприка
Альтернативный способ чтения и записи по индексу — функции set() и get(). IDE рекомендует заменять их синтаксисом с квадратными скобками, но знать их полезно:
arrayOfIngredients.set(1, "капуста") // аналог: arrayOfIngredients[1] = "капуста" arrayOfIngredients.get(1) // аналог: arrayOfIngredients[1]
set() принимает два параметра: индекс и новое значение. get() принимает только индекс и возвращает значение по нему.
Для перебора всех элементов массива используется цикл for:
for (i in arrayOfIngredients) { println(i) }
Пронумерованный вывод с использованием indexOf():
for (i in arrayOfIngredients) { println("Ингредиент ${arrayOfIngredients.indexOf(i) + 1}: $i") }
Ингредиент 1: яйцо Ингредиент 2: помидор Ингредиент 3: зелень Ингредиент 4: соль Ингредиент 5: перец
Массивы обладают широким набором методов для взаимодействия — они будут рассмотрены в следующих уроках.