¿Cómo puedo crear una matriz como lo hacemos en java?
int A[] = new int[N];
¿Cómo puedo hacer esto en Kotlin?
¿Cómo puedo crear una matriz como lo hacemos en java?
int A[] = new int[N];
¿Cómo puedo hacer esto en Kotlin?
Respuestas:
Según la referencia , las matrices se crean de la siguiente manera:
Para los tipos primitivos de Java, existen tipos distintos IntArray
, DoubleArray
etc. , 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
, false
para Boolean
.
Las matrices no primitivas están representadas por Array<T>
clase, donde T
es el tipo de elementos.
T
todaví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
, Double
y así sucesivamente.
Además, T
puede ser anulable y no nulo como String
y 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 }
Array<Int>(size)
no se compila. Eso es porque no puede crear una matriz no anulable sin proporcionar los elementos.
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, x
se tomará del índice 0, y
del índice 1, etc.
int
, pero para Objects, hay stackoverflow.com/questions/32679060/…