Como criar um array vazio no kotlin?

97

Estou usando Array(0, {i -> ""})atualmente e gostaria de saber se há uma implementação melhor, comoArray()

além disso, se eu estiver usando arrayOfNulls<String>(0) as Array<String>, o compilador me alertará que esse elenco nunca terá sucesso. Mas é a implementação padrão interna Array(0, {i -> ""}). Eu sinto falta de alguma coisa?

Huangcd
fonte
stackoverflow.com/questions/33583235/… - um dos comentários sugere que o aviso é um bug
Duncan McGregor

Respostas:

131

No final (junho de 2015), existe a função de biblioteca padrão Kotlin

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

Então, para criar um array vazio de Strings, você pode escrever

val emptyStringArray = arrayOf<String>()
Odisséia marciana
fonte
2
E quanto a matrizes digitadas como IntArray? No momento estou usando arrayOf<Int>().toIntArray(), existe alguma maneira melhor?
csharpfolk de
5
qual é o propósito desses métodos? porque não podemos atribuir o tamanho, então não podemos atribuir o valor ou obter. array [0] lança java.lang.ArrayIndexOutOfBoundsException:exceção.
Asif Mushtaq
e se o tipo for em Tvez de String?
Ari
1
@csharpfolk, você pode usar intArrayOf () para inicializar um IntArray vazio
Cremons
Como adicionar item na matriz de string em kotlin?
Syed Hamza Hassan
44

Apenas para referência, existe também emptyArray. Por exemplo,

var arr = emptyArray<String>()

Vejo

pt2121
fonte
1
arr [0] jogar java.lang.ArrayIndexOutOfBoundsException:como podemos usá-lo?
Asif Mushtaq
8
É um array vazio, você não pode adicionar / ler nada de / para ele. Pode parecer inútil, mas às vezes você precisa passar um array em algum lugar e isso permite construir um array vazio facilmente.
Kuba Beránek
1
isso é melhor do que a resposta de Martian Odyssey porque quando usado em uma classe de dados para inicializar um array, arrayOf causa um java.util.concurrent.ExecutionException, enquanto emptyArray () não.
iSWORD
1
Isso tem um comprimento imutável de 0! Portanto, é útil apenas para propósitos muito especiais que você não deseja armazenar nenhum dado (apenas deseja o tipo ). Use Array(length){""}para incluir um desejado length. Veja minha resposta abaixo para detalhes.
Mir-Ismaili
15

Vazio ou null? Essa é a questão!

Para criar um array de nulls, simplesmente use arrayOfNulls<Type>(length).


Mas para gerar uma matriz vazia de tamanho length, use:

val arr = Array(length) { emptyObject }

A nota é que você deve definir umemptyObject corretamente para cada tipo de dados (porque você não quer nulls). Por exemplo. para Strings, emptyObjectpode ser "". Então:

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

Aqui está um exemplo ao vivo . Observe que o programa é executado com dois argumentos de amostra, por padrão.

Mir-Ismaili
fonte
9

array nulo

var arrayString=Array<String?>(5){null}
var nullArray= arrayOfNulls<String>(5)
Ali Hasan
fonte
1
Este é um array de nulos, não strings vazias como em questão.
polkovnikov.ph
2

Usar:

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

Ele retorna uma matriz de tamanho 0 de Strings, inicializada com valores nulos.

1. Errado:

@JvmField val EMPTY_STRING_ARRAY = emptyArray<String>()

Retorna arrayOfNulls<String>(0)

2. Errado:

 @JvmField val EMPTY_STRING_ARRAY = arrayOf<String>()

Ele retorna uma matriz contendo as Strings.

Alexander Savin
fonte
2

Conforme mencionado acima, você pode usar IntArray(size)ou FloatArray(size).

CoolMind
fonte
1

Encontrei duas maneiras de criar uma matriz vazia, a segunda maneira sem lambda:

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

Em relação às strings nulas de Kotlin, isso não é permitido. Você tem que usar String? digite para permitir que as strings sejam nulas.

Ciprian Khlud
fonte