Wie erstelle ich ein leeres Array in Kotlin?

90

Ich verwende Array(0, {i -> ""})derzeit und würde gerne wissen, ob es eine bessere Implementierung gibt, wie zArray()

Wenn ich verwende arrayOfNulls<String>(0) as Array<String>, wird der Compiler mich darauf hinweisen, dass diese Besetzung niemals erfolgreich sein kann. Aber es ist die Standardimplementierung im Inneren Array(0, {i -> ""}). Vermisse ich etwas

huangcd
quelle
stackoverflow.com/questions/33583235/… - einer der Kommentare deutet darauf hin, dass die Warnung ein Fehler ist
Duncan McGregor

Antworten:

127

Seit Ende Juni 2015 gibt es die Kotlin-Standardbibliotheksfunktion

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

Um ein leeres Array von Strings zu erstellen, können Sie schreiben

val emptyStringArray = arrayOf<String>()
Mars Odyssee
quelle
2
Was ist mit getippten Arrays IntArray? Im Moment benutze ich arrayOf<Int>().toIntArray(), gibt es einen besseren Weg?
Csharpfolk
4
Was ist der Zweck dieser Methoden? weil wir die Größe nicht zuweisen können, können wir den Wert nicht zuweisen oder erhalten. Array [0] löst eine java.lang.ArrayIndexOutOfBoundsException:Ausnahme aus.
Asif Mushtaq
Was ist, wenn der Typ Tstatt ist String?
Ari
1
@csharpfolk, können Sie intArrayOf () verwenden, um ein leeres IntArray
Cremons
Wie füge ich ein Element in ein String-Array in Kotlin ein?
Syed Hamza Hassan
41

Nur als Referenz gibt es auch emptyArray. Beispielsweise,

var arr = emptyArray<String>()

Sehen

pt2121
quelle
1
arr [0] werfen, java.lang.ArrayIndexOutOfBoundsException:wie wir es verwenden können?
Asif Mushtaq
8
Es ist ein leeres Array, zu dem Sie nichts hinzufügen / lesen können. Es mag nutzlos erscheinen, aber manchmal müssen Sie irgendwo ein Array übergeben, und dies ermöglicht es Ihnen, ein leeres Array einfach zu erstellen.
Kuba Beránek
1
Dies ist besser als die Antwort von Martian Odyssey, da arrayOf bei Verwendung in einer Datenklasse zum Initialisieren eines Arrays eine java.util.concurrent.ExecutionException verursacht, während emptyArray () dies nicht tut.
iSWORD
1
Dies hat eine unveränderliche Länge von 0! Daher ist es nur für ganz besondere Zwecke nützlich, dass Sie keine Daten speichern möchten (nur den Typ ). Verwenden Sie Array(length){""}, um eine gewünschte einzuschließen length. Siehe meine Antwort unten für Details.
Mir-Ismaili
12

Leer oder null? Das ist die Frage!

nullVerwenden Sie einfach, um ein Array von s zu erstellen arrayOfNulls<Type>(length).


Verwenden Sie jedoch Folgendes, um ein leeres Array mit einer Größe zu generieren length:

val arr = Array(length) { emptyObject }

Der Hinweis ist das Sie füremptyObject jeden Datentyp einen korrekten Wert definieren müssen (weil Sie keine nulls möchten ). Z.B. für Strings emptyObjectkann sein "". So:

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

Hier ist ein Live-Beispiel . Beachten Sie, dass das Programm standardmäßig mit zwei Beispielargumenten ausgeführt wird.

Mir-Ismaili
quelle
9

Null-Array

var arrayString=Array<String?>(5){null}
var nullArray= arrayOfNulls<String>(5)
Ali Hasan
quelle
1
Dies ist ein Array von Nullen, keine leeren Zeichenfolgen wie in Frage.
polkovnikov.ph
2

Wie oben erwähnt, können Sie IntArray(size)oder verwenden FloatArray(size).

CoolMind
quelle
1

Ich habe zwei Möglichkeiten gefunden, ein leeres Array zu erstellen, die zweite ohne Lambda:

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

In Bezug auf Kotlins Nullzeichenfolgen ist dies nicht zulässig. Sie müssen String verwenden? Geben Sie ein, damit Zeichenfolgen null sind.

Ciprian Khlud
quelle
1

Verwenden:

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

Es gibt ein Array mit Strings der Größe 0 zurück, das mit Nullwerten initialisiert wurde.

1. Falsch:

@JvmField val EMPTY_STRING_ARRAY = emptyArray<String>()

Es kehrt zurück arrayOfNulls<String>(0)

2. Falsch:

 @JvmField val EMPTY_STRING_ARRAY = arrayOf<String>()

Es gibt ein Array zurück, das die Strings enthält.

Alexander Savin
quelle