Массивы в Kotlin
В Kotlin имеются "классические" массивы, когда в одном массиве могут быть данные только одного типа, и в массив нельзя добавлять элементы, как в список.
Объявление массива:
Массивы обычно объявляют с помощью val
, но это не значит, что нельзя изменять значения элементов массива. Это лишь значит, что неизменяемой переменной нельзя присвоить другой массив. Однако необходимость в подобном действии возникает редко.
Инициализация массивов возможна как с помощью функций, так и конструкторов классов. В примере ниже используется встроенная функция arrayOf()
, которой передается набор значений.
fun main() { val a: Array<Int> = arrayOf(9, 15, 4) println("Количество элементов: ${a.size}") a[0] = 10 print("Значения элементов: ") for (i in a) { print("$i ") } println() }
Для измерения длины массива используется свойство класса size
.
Инициация трех элементов массива нулем при использовании конструктора класса:
fun main() { val a: Array<Int> = Array(3) {0} a[1] = 25 for (i in a) { println(i) } }
Конструктор класса Array
принимает в качестве второго аргумента лямбда-выражение, которое заключается в фигурные скобки, оно генерирует значения. Такие аргументы в Kotlin обычно выносят за круглые скобки.
При запросе элементов и изменении их значений используется обычный для массивов синтаксис с квадратными скобками. В классе их переопределяют методы get()
и set()
. Их также можно вызывать непосредственно по имени.
В Kotlin массивы представлены не только классом Array
. Есть специальные классы (и соответствующие им функции) для создания массивов, содержащих элементы примитивных типов – BooleanArray
, ByteArray
, ShortArray
, IntArray
, LongArray
, CharArray
, FloatArray
, DoubleArray
. Они несколько упрощают создание массивов. Обратим внимание, нет класса "строковый массив". Строки не примитивный тип.
fun main() { val a: BooleanArray = booleanArrayOf(true, false, false) for (i in a) println(i) }
Для числовых типов также есть варианты беззнаковых массивов – UByteArray
, UShortArray
, UIntArray
, ULongArray
.
С помощью логических операторов in
и !in
можно проверить наличие определенных значений в массиве.
fun main() { val b: IntArray = intArrayOf(5, 3, 1, 2) println(2 in b) // true println(0 in b) // false println(10 !in b) // true }
Матрицы
В Kotlin возможно создание двумерных массивов.
fun main() { val a: Array<IntArray> = Array(3) {IntArray(4) {0} } // количество строк val n = a.size // количество элементов в строке val m = a[0].size for (i in 0 until n) { for (j in 0 until m) { a[i][j] = (Math.random() * 10) .toInt() print(" ${a[i][j]}") } println() } }
Пример выполнения кода:
0 1 0 1 3 5 2 9 4 7 9 9
Заполнять массив можно также с помощью функций:
fun main() { val a: Array<IntArray> = Array(2) {IntArray(4) {0} } a[0] = intArrayOf(1, 2, 3, 4) a[1] = intArrayOf(5, 6, 7, 8) for (i in a) { for (j in i) { print(" $j") } println() } }
PDF-версия курса с дополнительными уроками