Как я могу создать массив в Kotlin, как в Java, просто указав размер?


Ответы:


154

Согласно справке , массивы создаются следующим образом:

  • Для примитивных типов Java существуют отдельные типы IntArrayи DoubleArrayт. Д., Которые хранят неупакованные значения.

    Они создаются с помощью соответствующих конструкторов и фабричных функций:

    val arrayOfZeros = IntArray(size) //equivalent in Java: new int[size]
    val numbersFromOne = IntArray(size) { it + 1 }
    val myInts = intArrayOf(1, 1, 2, 3, 5, 8, 13, 21)
    

    Первый аналогичен таковому в Java, он просто создает примитивный массив, заполненный значением по умолчанию, например нулем для Int, falseдля Boolean.

  • Непримитивные массивы представлены Array<T>классом, где T- тип элементов.

    Tвсе еще может быть один из типов примитивов в Java ( Int, Boolean, ...), но значения внутри будут боксировали равносильно в Java Integer, Doubleи так далее.

    Кроме того, Tможет быть как допускающим значение NULL, так и ненулевым, например Stringи String?.

    Они создаются аналогичным образом:

    val nulls = arrayOfNulls<String>(size) //equivalent in Java: new String[size]
    val strings = Array(size) { "n = $it" } 
    val myStrings = arrayOf("foo", "bar", "baz")
    
    val boxedInts = arrayOfNulls<Int>(size) //equivalent in Java: new Integer[size]
    val boxedZeros = Array(size) { 0 }
    

15
Array<Int>(size)не компилируется. Это потому, что вы не можете создать массив, не допускающий значения NULL, без предоставления элементов.
Кирилл Рахман

2
@KirillRakhman, спасибо за ваше замечание, это была непреднамеренная ошибка. Исправлена.
горячая клавиша

0

В Kotlin создать IntArray размера N просто. ИспользоватьIntArray(n) или соответствующий тип, как подробно описано в ответе на горячие клавиши.

При использовании массива фиксированного размера вы можете использовать Kotlin Destructuring

// Create fixed sized array
val point = IntArray(2)

// Access values directly
val (x, y) = point

В этом случае xбудут взяты из индекса 0, yиз индекса 1 и т. Д.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.