Comment créer un tableau vide dans kotlin?

93

J'utilise Array(0, {i -> ""})actuellement, et j'aimerais savoir s'il existe une meilleure implémentation telle queArray()

de plus, si j'utilise arrayOfNulls<String>(0) as Array<String>, le compilateur m'alertera que cette distribution ne pourra jamais réussir. Mais c'est l'implémentation par défaut à l'intérieur Array(0, {i -> ""}). Est-ce que je rate quelque chose?

huangcd
la source
stackoverflow.com/questions/33583235/… - l'un des commentaires suggère que l'avertissement est un bug
Duncan McGregor

Réponses:

128

À la fin (juin 2015), il existe la fonction de bibliothèque standard de Kotlin

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

Donc, pour créer un tableau vide de chaînes, vous pouvez écrire

val emptyStringArray = arrayOf<String>()
Odyssée martienne
la source
2
Qu'en est-il des tableaux typés comme IntArray? En ce moment j'utilise arrayOf<Int>().toIntArray(), y a-t-il un meilleur moyen?
csharpfolk
5
quel est le but de ces méthodes? car nous ne pouvons pas attribuer la taille, nous ne pouvons donc pas attribuer la valeur ou obtenir. array [0] lance une java.lang.ArrayIndexOutOfBoundsException:exception.
Asif Mushtaq
et si le type est Tau lieu de String?
Ari
1
@csharpfolk, vous pouvez utiliser intArrayOf () pour initialiser un IntArray vide
Cremons
Comment ajouter un élément dans un tableau de chaînes dans kotlin?
Syed Hamza Hassan
42

Juste pour référence, il y en a aussi emptyArray. Par exemple,

var arr = emptyArray<String>()

Voir

pt2121
la source
1
arr [0] jeter java.lang.ArrayIndexOutOfBoundsException:comment on peut l'utiliser?
Asif Mushtaq
8
C'est un tableau vide, vous ne pouvez rien y ajouter / lire. Cela peut sembler inutile, mais parfois vous devez passer un tableau quelque part et cela vous permet de construire facilement un tableau vide.
Kuba Beránek
1
c'est mieux que la réponse de Martian Odyssey car lorsqu'il est utilisé dans une classe de données pour initialiser un tableau, arrayOf provoque une exception java.util.concurrent.ExecutionExecution alors que emptyArray () ne le fait pas.
iSWORD
1
Cela a une longueur immuable de 0! Il est donc utile uniquement à des fins très spéciales que vous ne vouliez pas stocker de données (vous voulez simplement du type ). Utilisez Array(length){""}pour inclure un fichier length. Voir ma réponse ci-dessous pour plus de détails.
Mir-Ismaili
14

Vide ou null? Voilà la question!

Pour créer un tableau de nulls, utilisez simplement arrayOfNulls<Type>(length).


Mais pour générer un tableau vide de taille length, utilisez:

val arr = Array(length) { emptyObject }

La note est que vous devez définir unemptyObject correctement pour chaque type de données (parce que vous ne voulez pas de nulls). Par exemple. pour Strings, emptyObjectpeut être "". Donc:

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

Voici un exemple en direct . Notez que le programme s'exécute avec deux exemples d'arguments, par défaut.

Mir-Ismaili
la source
9

tableau nul

var arrayString=Array<String?>(5){null}
var nullArray= arrayOfNulls<String>(5)
Ali hasan
la source
1
Il s'agit d'un tableau de valeurs nulles, pas de chaînes vides comme en question.
polkovnikov.ph
2

Utilisation:

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

Il renvoie un tableau de chaînes de taille 0, initialisé avec des valeurs nulles.

1. Faux:

@JvmField val EMPTY_STRING_ARRAY = emptyArray<String>()

Il retourne arrayOfNulls<String>(0)

2. Faux:

 @JvmField val EMPTY_STRING_ARRAY = arrayOf<String>()

Il renvoie un tableau contenant les chaînes.

Alexandre Savin
la source
2

Comme mentionné ci-dessus, vous pouvez utiliser IntArray(size)ou FloatArray(size).

CoolMind
la source
1

J'ai trouvé deux façons de créer un tableau vide, la deuxième façon sans lambda:

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

En ce qui concerne les chaînes nulles de Kotlin, cela n'est pas autorisé. Vous devez utiliser String? type pour autoriser les chaînes à être nulles.

Ciprian Khlud
la source