Jak stworzyć pustą tablicę w Kotlin?

93

Array(0, {i -> ""})Obecnie używam i chciałbym wiedzieć, czy istnieje lepsza implementacja, taka jakArray()

plus, jeśli używam arrayOfNulls<String>(0) as Array<String>, kompilator ostrzeże mnie, że to rzutowanie nigdy się nie powiedzie. Ale to domyślna implementacja w środku Array(0, {i -> ""}). Czy coś mi brakuje?

huangcd
źródło
stackoverflow.com/questions/33583235/… - jeden z komentarzy sugeruje, że ostrzeżenie jest błędem
Duncan McGregor

Odpowiedzi:

128

Od końca (czerwiec 2015) dostępna jest standardowa funkcja biblioteki Kotlin

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

Aby utworzyć pustą tablicę ciągów, możesz pisać

val emptyStringArray = arrayOf<String>()
Martian Odyssey
źródło
2
A co z typowanymi tablicami IntArray? Teraz używam arrayOf<Int>().toIntArray(), czy jest lepszy sposób?
csharpfolk
5
jaki jest cel tych metod? ponieważ nie możemy przypisać rozmiaru, więc nie możemy przypisać wartości ani pobrać. tablica [0] zgłasza java.lang.ArrayIndexOutOfBoundsException:wyjątek.
Asif Mushtaq
co jeśli typ jest Tzamiast String?
Ari
1
@csharpfolk, możesz użyć intArrayOf () do zainicjowania pustego IntArray
Cremons,
Jak dodać pozycję w tablicy ciągów w kotlinie?
Syed Hamza Hassan
42

Tylko w celach informacyjnych, jest też emptyArray. Na przykład,

var arr = emptyArray<String>()

Widzieć

pt2121
źródło
1
arr [0] rzut, java.lang.ArrayIndexOutOfBoundsException:jak możemy to wykorzystać?
Asif Mushtaq
8
To pusta tablica, do / z niej niczego nie można dodawać ani odczytywać. Może się to wydawać bezużyteczne, ale czasami trzeba gdzieś przekazać tablicę, co pozwala łatwo skonstruować pustą tablicę.
Kuba Beránek
1
jest to lepsze niż odpowiedź Martian Odyssey, ponieważ w przypadku użycia w klasie danych do zainicjowania tablicy, arrayOf powoduje wyjątek java.util.concurrent.ExecutionException, podczas gdy emptyArray () nie.
iSWORD
1
To ma niezmienną długość 0! Jest więc przydatny tylko do bardzo specjalnych celów, w których nie chcesz przechowywać żadnych danych (po prostu chcesz wpisać ). Służy Array(length){""}do dołączania żądanego pliku length. Zobacz moją odpowiedź poniżej, aby uzyskać szczegółowe informacje.
Mir-Ismaili
14

Pusty czy null? Oto jest pytanie!

Aby utworzyć tablicę nulls, po prostu użyj arrayOfNulls<Type>(length).


Ale aby wygenerować pustą tablicę rozmiaru length, użyj:

val arr = Array(length) { emptyObject }

Należy zauważyć, że należy odpowiednio zdefiniowaćemptyObject dla każdego typu danych (ponieważ nie chcesz nulls). E. g. dla Strings, emptyObjectmoże być "". Więc:

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

Tutaj jest na żywo przykładem . Zauważ, że program domyślnie działa z dwoma przykładowymi argumentami.

Mir-Ismaili
źródło
9

tablica null

var arrayString=Array<String?>(5){null}
var nullArray= arrayOfNulls<String>(5)
Ali Hasan
źródło
1
To jest tablica wartości null, a nie pustych ciągów, jak w pytaniu.
polkovnikov.ph
2

Posługiwać się:

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

Zwraca tablicę ciągów o rozmiarze 0, zainicjowaną wartościami null.

1. Źle:

@JvmField val EMPTY_STRING_ARRAY = emptyArray<String>()

Wraca arrayOfNulls<String>(0)

2. Źle:

 @JvmField val EMPTY_STRING_ARRAY = arrayOf<String>()

Zwraca tablicę zawierającą ciągi znaków.

Alexander Savin
źródło
2

Jak wspomniano powyżej, możesz użyć IntArray(size)lub FloatArray(size).

CoolMind
źródło
1

Znalazłem dwa sposoby na utworzenie pustej tablicy, drugi sposób bez lambdy:

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

Jeśli chodzi o puste ciągi Kotlin, jest to niedozwolone. Musisz użyć String? type, aby umożliwić ciągom zerową wartość.

Ciprian Khlud
źródło