Як я можу створити масив у Kotlin, як у Java, просто вказавши розмір?


Відповіді:


154

Згідно з посиланням , масиви створюються наступним чином:

  • Для примітивних типів Яви існують різні типи IntArray, і DoubleArrayт.д. , які зберігають Unboxed значення.

    Вони створюються з відповідними конструкторами та заводськими функціями:

    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може бути як нульовим, так і ненульовим, як 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)не компілюється. Це тому, що ви не можете створити масив, що не допускає нульового значення, не надавши елементів.
Кирило Рахман

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.