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?


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>()

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


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.


9

array nulo

var arrayString=Array<String?>(5){null}
var nullArray= arrayOfNulls<String>(5)

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.


2

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


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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.