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?


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

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ć


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.


9

tablica null

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

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.


2

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


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ść.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.