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?


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

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


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.


9

tableau nul

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

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.


2

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


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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.