¿Cómo puedo crear una matriz en Kotlin como en Java simplemente proporcionando un tamaño?


Respuestas:


153

Según la referencia , las matrices se crean de la siguiente manera:

  • Para los tipos primitivos de Java, existen tipos distintos IntArray, DoubleArrayetc. , que almacenan valores sin caja .

    Se crean con los constructores y funciones de fábrica correspondientes:

    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)
    

    El primero es similar al de Java, simplemente crea una matriz primitiva rellena con el valor predeterminado, por ejemplo, cero para Int, falsepara Boolean.

  • Las matrices no primitivas están representadas por Array<T>clase, donde Tes el tipo de elementos.

    Ttodavía puede ser uno de los tipos primitivos en Java ( Int, Boolean, ...), pero los valores en el interior serán en caja de forma equivalente a Java Integer, Doubley así sucesivamente.

    Además, Tpuede ser anulable y no nulo como Stringy String?.

    Estos se crean de manera similar:

    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)no se compila. Eso es porque no puede crear una matriz no anulable sin proporcionar los elementos.
Kirill Rakhman

2
@KirillRakhman, gracias por tu comentario, fue un error inadvertido. Fijo.
tecla

0

En Kotlin, crear un IntArray de tamaño N es simple. Use IntArray(n)o el tipo apropiado, como se detalla a fondo en la respuesta de la tecla de acceso rápido.

Al utilizar su matriz de tamaño fijo, puede usar Kotlin Destructuring

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

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

En este caso, xse tomará del índice 0, ydel índice 1, etc.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.