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


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

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


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.


9

Null-Array

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

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


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.


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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.