Jak mogę utworzyć tablicę w Kotlinie, tak jak w Javie, po prostu podając rozmiar?


Odpowiedzi:


153

Zgodnie z referencją tablice są tworzone w następujący sposób:

  • Dla prymitywnych typów Javy istnieją różne typy IntArray, DoubleArrayitp które przechowują rozpakowanych wartości.

    Tworzone są za pomocą odpowiednich konstruktorów i funkcji fabrycznych:

    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)
    

    Pierwsza jest podobna do tej w Javie, po prostu tworzy prymitywną tablicę wypełnioną domyślną wartością, np. Zero for Int, falsefor Boolean.

  • Tablice inne niż pierwotne są reprezentowane przez Array<T>klasę, gdzie Tjest typem elementów.

    Tnadal może być jednym z typów prymitywnych w Javie ( Int, Boolean...), ale wartości wewnątrz zostaną zapakowane równoważnie do Javy Integer, Doublei tak dalej.

    Ponadto Tmoże mieć wartość null i non-null, jak Stringi String?.

    Są one tworzone w podobny sposób:

    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)nie kompiluje się. Dzieje się tak, ponieważ nie można utworzyć tablicy niepodlegającej wartości null bez podania elementów.
Kirill Rakhman,

2
@KirillRakhman, dziękuję za twoją uwagę, to był nieumyślny błąd. Naprawiony.
skrót klawiszowy

0

W Kotlinie tworzenie IntArray o rozmiarze N jest proste. Użyj IntArray(n)lub odpowiedniego typu, dokładnie opisanego w odpowiedzi klawisza skrótu.

Korzystając z tablicy o stałym rozmiarze, możesz użyć Destrukturyzacji Kotlin

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

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

W tym przypadku xzostanie pobrany z indeksu 0, yz indeksu 1 itd.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.