Como posso criar uma matriz em Kotlin como em Java apenas fornecendo um tamanho?

Respostas:

153

De acordo com a referência , os arrays são criados da seguinte maneira:

  • Para os tipos primitivos de Java, existem tipos distintos IntArray, DoubleArrayetc. , que armazenam valores não embalados .

    Eles são criados com os construtores e funções de fábrica correspondentes:

    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)
    

    O primeiro é semelhante ao do Java, ele apenas cria um array primitivo preenchido com o valor padrão, por exemplo, zero para Int, falsepara Boolean.

  • Matrizes não primitivas são representadas por Array<T>classe, onde Té o tipo de item.

    Tainda pode ser um dos tipos primitivos em Java ( Int, Boolean...), mas os valores dentro vai ser embalado de forma equivalente para Java do Integer, Doublee assim por diante.

    Além disso, Tpode ser anulável e não nulo como Stringe String?.

    Eles são criados de maneira semelhante:

    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 }
    
tecla de atalho
fonte
15
Array<Int>(size)não compila. Isso porque você não pode criar uma matriz não anulável sem fornecer os elementos.
Kirill Rakhman
2
@KirillRakhman, obrigado por sua observação, foi um erro inadvertido. Fixo.
tecla de atalho de
0

No Kotlin, criar um IntArray de tamanho N é simples. Use IntArray(n)ou o tipo apropriado, conforme detalhado na resposta das teclas de atalho.

Ao utilizar sua matriz de tamanho fixo, você pode usar Kotlin Destructuring

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

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

Neste caso, xserá retirado do índice 0, ydo índice 1, etc.

Gibolt
fonte