¿Cómo crear una matriz vacía en kotlin?

93

Estoy usando Array(0, {i -> ""})actualmente y me gustaría saber si hay una mejor implementación comoArray()

además, si estoy usando arrayOfNulls<String>(0) as Array<String>, el compilador me alertará de que esta transmisión nunca podrá tener éxito. Pero es la implementación predeterminada en el interior Array(0, {i -> ""}). ¿Me pierdo algo?

huangcd
fuente
stackoverflow.com/questions/33583235/… - uno de los comentarios sugiere que la advertencia es un error
Duncan McGregor

Respuestas:

128

Últimamente (junio de 2015) existe la función de biblioteca estándar de Kotlin

public fun <T> arrayOf(vararg t: T): Array<T>

Entonces, para crear una matriz vacía de cadenas, puede escribir

val emptyStringArray = arrayOf<String>()
Odisea marciana
fuente
2
¿Qué pasa con las matrices escritas como IntArray? Ahora mismo estoy usando arrayOf<Int>().toIntArray(), ¿hay alguna manera mejor?
csharpfolk
5
¿Cuál es el propósito de estos métodos? porque no podemos asignar el tamaño, por lo que no podemos asignar el valor u obtener. array [0] lanza una java.lang.ArrayIndexOutOfBoundsException:excepción.
Asif Mushtaq
¿y si el tipo es en Tlugar de String?
Ari
1
@csharpfolk, puede usar intArrayOf () para inicializar un IntArray vacío
Cremons
¿Cómo agregar un elemento en una matriz de cadenas en kotlin?
Syed Hamza Hassan
42

Solo como referencia, también lo hay emptyArray. Por ejemplo,

var arr = emptyArray<String>()

Ver

pt2121
fuente
1
arr [0] throw java.lang.ArrayIndexOutOfBoundsException:¿cómo podemos usarlo?
Asif Mushtaq
8
Es una matriz vacía, no puede agregar / leer nada a / desde ella. Puede parecer inútil, pero a veces tienes que pasar una matriz en algún lugar y esto te permite construir una matriz vacía fácilmente.
Kuba Beránek
1
esto es mejor que la respuesta de Martian Odyssey porque cuando se usa en una clase de datos para inicializar una matriz, arrayOf causa una java.util.concurrent.ExecutionException mientras que emptyArray () no lo hace.
iSWORD
1
Esto tiene una longitud inmutable de 0! Por lo tanto, es útil solo para fines muy especiales en los que no desea almacenar ningún dato (solo desea escribir ). Use Array(length){""}para incluir un deseado length. Vea mi respuesta a continuación para obtener más detalles.
Mir-Ismaili
14

Vacío o null? ¡Esa es la pregunta!

Para crear una matriz de nulls, simplemente use arrayOfNulls<Type>(length).


Pero para generar una matriz vacía de tamaño length, use:

val arr = Array(length) { emptyObject }

La nota es que se debe definir unaemptyObject adecuada para cada tipo de datos (pd no desea nulls). P.ej. para Strings, emptyObjectpuede ser "". Entonces:

val arr = Array(3) { "" }  // is equivalent for: arrayOf("","","")

He aquí un ejemplo en vivo . Tenga en cuenta que el programa se ejecuta con dos argumentos de muestra, de forma predeterminada.

Mir-Ismaili
fuente
9

matriz nula

var arrayString=Array<String?>(5){null}
var nullArray= arrayOfNulls<String>(5)
Ali hasan
fuente
1
Esta es una matriz de nulos, no cadenas vacías como en la pregunta.
polkovnikov.ph
2

Utilizar:

@JvmField val EMPTY_STRING_ARRAY = arrayOfNulls<String>(0)

Devuelve una matriz de cadenas de tamaño 0, inicializada con valores nulos.

1. Incorrecto:

@JvmField val EMPTY_STRING_ARRAY = emptyArray<String>()

Vuelve arrayOfNulls<String>(0)

2. Incorrecto:

 @JvmField val EMPTY_STRING_ARRAY = arrayOf<String>()

Devuelve una matriz que contiene las cadenas.

Alexander Savin
fuente
2

Como se mencionó anteriormente, puede usar IntArray(size)o FloatArray(size).

CoolMind
fuente
1

Encontré dos formas de crear una matriz vacía, la segunda forma sin una lambda:

var arr = Array (0, { i -> "" })
var arr2 = array<String>()

Con respecto a las cadenas nulas de Kotlin, esto no está permitido. ¿Tienes que usar String? type para permitir que las cadenas sean nulas.

Ciprian Khlud
fuente