Dokumentacja nieco ukrywa odpowiedź. Zamiast podać przykład kodu źródłowego, array()w komentarzu bocznym wspominają o (przestarzałej) funkcji: Aby utworzyć tablicę, możemy użyć tablicy funkcji biblioteki () i przekazać do niej wartości pozycji, aby tablica (1, 2, 3) ) tworzy tablicę [1, 2, 3].
Lars Blumberg,
8
Chociaż lubię Kotlin, ale mówię, że „Dokumentacja Kotlin” nie jest wystarczająco dobra (nauczyłem się więcej z innych stron niż kotlinlang.org).
Hassan Tareq
1
Również czasami potrzebujesz intRange, który możesz zrobić: val numbers = 1..5co daje zakres int od 1 do 5.
Czy lepiej jest używać intArrayOfponad arrayOf? Czy to IntArrayma przewagę nad Array<Int>?
Lars Blumberg,
16
@LarsBlumberg IntArray jest równe int [], tablica <Int> jest taka sama jak Integer []
user2235698
3
Inicjowanie listy jest bardzo podobne:listOf(10, 20, 30, 40, 50)
Cristan,
Kiedy używam funkcji intArrayOf (), patrzę w twarz Exception in thread "main" java.lang.NoClassDefFoundError: kotlin/KotlinPackage. Używam jdk1.8.0_241i Intellij IDEA
TeachMeJava
92
Warto wspomnieć, że podczas korzystania builtines Kotlin (np intArrayOf(), longArrayOf(), arrayOf()itp) nie są w stanie zainicjować tablicę z wartościami domyślnymi (lub wszystkie wartości do żądanej wartości) dla danego rozmiaru, zamiast trzeba zrobić initialize poprzez wywołanie według konstruktora klasy .
// Array of integers of a size of Nval arr =IntArray(N)// Array of integers of a size of N initialized with a default value of 2val arr =IntArray(N){ i ->2}
To pomaga, jeśli podać przykłady na initw Array<Int>()i IntArray(), odpowiedź nie jest dużo pomocne, jak teraz.
Lars Blumberg
Odpowiedź została zmodyfikowana
Ali hasan
Tablica <Int> daje tablicę liczb całkowitych w ramkach, natomiast IntArray daje rzeczywistą tablicę int.
Mike,
4
Język Kotlin specjalizuje zajęcia do reprezentowania tablice prymitywnych typów bez boks napowietrznych: na przykład - IntArray, ShortArray, ByteArray, itd. Muszę powiedzieć, że klasy te nie mają żadnego związku spadków dominującej Arrayklasy, ale mają ten sam zestaw metod i właściwości. Każdy z nich ma również odpowiednią funkcję fabryczną. Aby zainicjować tablicę z wartościami w Kotlinie, wystarczy wpisać:
val myArr:IntArray= intArrayOf(10,20,30,40,50)
... lub w ten sposób:
val myArr =Array<Int>(5,{ i ->((i+1)*10)})
myArr.forEach { println(it)}// 10, 20, 30, 40, 50
Myślę, że jedną rzeczą, o której warto wspomnieć i która nie jest wystarczająco intuicyjna w dokumentacji, jest to, że kiedy używasz funkcji fabrycznej do tworzenia tablicy i określasz jej rozmiar, tablica jest inicjowana wartościami równymi ich wartościom indeksu. Na przykład, w układzie takim jak to:
val array = Array(5, { i -> i }), wartości początkowe są przypisane [0,1,2,3,4]i nie powiedzieć [0,0,0,0,0]. Dlatego z dokumentacji wynika val asc = Array(5, { i -> (i * i).toString() })odpowiedź["0", "1", "4", "9", "16"]
5 jest rozmiarem Int Array. funkcja lambda jest funkcją początkową elementu. zakres „it” w [0,4] plus 1 zasięg marki w [1,5]
funkcja pochodzenia to:
/**
* An array of ints. When targeting the JVM, instances of this class are
* represented as `int[]`.
* @constructor Creates a new array of the specified [size], with all elements
* initialized to zero.
*/publicclassIntArray(size:Int){/**
* Creates a new array of the specified [size], where each element is
* calculated by calling the specified
* [init] function. The [init] function returns an array element given
* its index.
*/public inline constructor(size:Int,init:(Int)->Int)...}
Możesz po prostu użyć istniejących standardowych metod bibliotecznych , jak pokazano tutaj:
val numbers = intArrayOf(10,20,30,40,50)
Warto jednak użyć specjalnego konstruktora:
val numbers2=IntArray(5){(it +1)*10}
Podajesz rozmiar i lambda, które opisują, jak zainicjować wartości. Oto dokumentacja:
/**
* Creates a new array of the specified [size], where each element is calculated by calling the specified
* [init] function. The [init] function returns an array element given its index.
*/public inline constructor(size:Int,init:(Int)->Int)
Zastanawiam się, dlaczego nikt nie udzielił najprostszych odpowiedzi:
val array:Array<Int>=[1,2,3]
Zgodnie z jednym z komentarzy do mojej pierwotnej odpowiedzi, zdałem sobie sprawę, że działa to tylko wtedy, gdy jest użyte w argumentach adnotacji (co było dla mnie naprawdę nieoczekiwane).
Wygląda na to, że Kotlin nie pozwala na tworzenie literałów tablicowych poza adnotacjami.
Na przykład spójrz na ten kod, używając @Option z biblioteki args4j:
@Opcja(
name = "-h",
aliasy = [„--help”, „-?”],
wykorzystanie = „Pokaż tę pomoc”
)
var help: Boolean = false
Mam następujący błąd z tym kodem: Nieobsługiwane [Zbiór literałów poza adnotacjami]
Rémi P
Nie widziałem tego wcześniej. Czy ta składnia jest nowa w Kotlin?
Lars Blumberg
@LarsBlumberg, prawdopodobnie zacząłem ostatnio używać Kotlina z IntelliJ 2019.1 i zainicjowałem tablicę ciągów, tak jak pokazałem i zadziałało
hdkrus
@ RémiP, Dobra uwaga, użyłem go w argumentach adnotacji. Ale to by oznaczało, że literały tablicowe działają w niektórych kontekstach, a w innych nie?
hdkrus
1
@hdkrus Dlaczego nie zaktualizujesz swojej odpowiedzi, aby pokazać, jak inicjowanie tablicy działa z adnotacjami? Może to mieć wartość dla wielu czytelników tych pytań.
Lars Blumberg,
1
W moim przypadku muszę zainicjować moje elementy szuflady. Dane wypełniam poniższym kodem.
val iconsArr :IntArray= resources.getIntArray(R.array.navigation_drawer_items_icon)val names :Array<String>= resources.getStringArray(R.array.navigation_drawer_items_name)// Use lambda function to add data in my custom model class i.e. DrawerItemval drawerItems =Array<DrawerItem>(iconsArr.size,init={ index ->DrawerItem(iconsArr[index], names[index])})Log.d(LOGGER_TAG,"Number of items in drawer is: "+ drawerItems.size)
To tak naprawdę nie odpowiada na pytanie w rozsądny sposób.
Qwerp-Derp,
Proszę sprawdzić komentarz, w którym użyłem funkcji lambda, aby dodać elementy.
Rahul,
Nadal wydaje się to skomplikowanym sposobem rozwiązania tego problemu, przynajmniej w porównaniu z innymi odpowiedziami. Spojrzałem również na moją poprzednią wiadomość i wydaje się, że z perspektywy czasu jest ona trudna - przepraszam.
Qwerp-Derp,
W porządku, nie ma problemu. Próbowałem tylko odpowiedzieć w sposób, który rozwiązał mój problem, nie porównałem go z innymi odpowiedziami. Dziękuję Ci!
Rahul
1
Zadeklaruj tablicę int w globalnej
var numbers= intArrayOf()
następnie metoda onCreate zainicjuje tablicę wartością
overridefun onCreate(savedInstanceState:Bundle?){super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)//create your int array here
numbers= intArrayOf(10,20,30,40,50)}
Chociaż ten kod może odpowiedzieć na pytanie, zapewnienie dodatkowego kontekstu dotyczącego tego, dlaczego i / lub jak ten kod odpowiada na pytanie, poprawia jego długoterminową wartość.
rollstuhlfahrer
1
W Javie można zainicjować tablicę, taką jak:
int numbers[]= new int[]{10,20,30,40,50}
Ale w Kotlin tablica została zainicjowana na wiele sposobów, takich jak:
Dowolny ogólny typ tablicy, której można użyć funkcji arrayOf () :
val arr = arrayOf(10,20,30,40,50)val genericArray = arrayOf(10,"Stack",30.00,40,"Fifty")
Za pomocą funkcji narzędziowych Kotlin można zainicjować tablicę
Chociaż ten kod może odpowiedzieć na pytanie, zapewnienie dodatkowego kontekstu dotyczącego tego, jak i / lub dlaczego rozwiązuje problem, poprawiłoby długoterminową wartość odpowiedzi.
leopal
0
Moja odpowiedź stanowi uzupełnienie @maroun. Oto kilka sposobów na zainicjowanie tablicy:
Użyj tablicy
val numbers = arrayOf(1,2,3,4,5)
Użyj ścisłej tablicy
val numbers = intArrayOf(1,2,3,4,5)
Mieszaj rodzaje matryc
val numbers = arrayOf(1,2,3.0,4f)
Zagnieżdżanie tablic
val numbersInitials = intArrayOf(1,2,3,4,5)val numbers = arrayOf(numbersInitials, arrayOf(6,7,8,9,10))
array()
w komentarzu bocznym wspominają o (przestarzałej) funkcji: Aby utworzyć tablicę, możemy użyć tablicy funkcji biblioteki () i przekazać do niej wartości pozycji, aby tablica (1, 2, 3) ) tworzy tablicę [1, 2, 3].val numbers = 1..5
co daje zakres int od 1 do 5.Odpowiedzi:
Szczegółowe informacje można znaleźć w Kotlin - podstawowe typy .
Możesz także podać funkcję inicjalizacyjną jako drugi parametr:
źródło
intArrayOf
ponadarrayOf
? Czy toIntArray
ma przewagę nadArray<Int>
?listOf(10, 20, 30, 40, 50)
Exception in thread "main" java.lang.NoClassDefFoundError: kotlin/KotlinPackage
. Używamjdk1.8.0_241
i Intellij IDEAWarto wspomnieć, że podczas korzystania builtines Kotlin (np
intArrayOf()
,longArrayOf()
,arrayOf()
itp) nie są w stanie zainicjować tablicę z wartościami domyślnymi (lub wszystkie wartości do żądanej wartości) dla danego rozmiaru, zamiast trzeba zrobić initialize poprzez wywołanie według konstruktora klasy .źródło
IntArray(N) {i -> 2}
a nawet (podczas inicjalizacji ze stałą)IntArray(N) {2}
Oto przykład:
Możesz także skorzystać z placu zabaw, aby przetestować funkcje językowe.
źródło
W Kotlin jest kilka sposobów.
Następnie po prostu wartość początkowa od użytkowników lub z innej kolekcji lub gdziekolwiek chcesz.
Możemy również stworzyć tablicę z wbudowaną funkcją jak-
Inny sposób
Możesz także użyć
doubleArrayOf()
lubDoubleArray()
dowolnego typu pierwotnego zamiast Int.źródło
var arr = IntArray(size, { it * 1 } )
jest taki sam jakvar arr = IntArray(size){it}
W Kotlin możemy stworzyć tablicę używając
arrayOf()
,intArrayOf()
,charArrayOf()
,booleanArrayOf()
,longArrayOf()
funkcje.Na przykład:
źródło
Stare pytanie, ale jeśli chcesz użyć zakresu:
Daje prawie taki sam wynik jak:
wynik: 10, 20, 30, 40, 50
Myślę, że pierwsza opcja jest nieco bardziej czytelna. Oba działają.
źródło
możesz użyć tych metod
przykład
init reprezentuje wartość domyślną (inicjowanie)
źródło
init
wArray<Int>()
iIntArray()
, odpowiedź nie jest dużo pomocne, jak teraz.Język Kotlin specjalizuje zajęcia do reprezentowania tablice prymitywnych typów bez boks napowietrznych: na przykład -
IntArray
,ShortArray
,ByteArray
, itd. Muszę powiedzieć, że klasy te nie mają żadnego związku spadków dominującejArray
klasy, ale mają ten sam zestaw metod i właściwości. Każdy z nich ma również odpowiednią funkcję fabryczną. Aby zainicjować tablicę z wartościami w Kotlinie, wystarczy wpisać:... lub w ten sposób:
Teraz możesz go użyć:
Mam nadzieję że to pomoże.
źródło
Myślę, że jedną rzeczą, o której warto wspomnieć i która nie jest wystarczająco intuicyjna w dokumentacji, jest to, że kiedy używasz funkcji fabrycznej do tworzenia tablicy i określasz jej rozmiar, tablica jest inicjowana wartościami równymi ich wartościom indeksu. Na przykład, w układzie takim jak to:
val array = Array(5, { i -> i })
, wartości początkowe są przypisane[0,1,2,3,4]
i nie powiedzieć[0,0,0,0,0]
. Dlatego z dokumentacji wynikaval asc = Array(5, { i -> (i * i).toString() })
odpowiedź["0", "1", "4", "9", "16"]
źródło
Możesz utworzyć tablicę Int w następujący sposób:
5 jest rozmiarem Int Array. funkcja lambda jest funkcją początkową elementu. zakres „it” w [0,4] plus 1 zasięg marki w [1,5]
funkcja pochodzenia to:
Klasa IntArray zdefiniowana w Arrays.kt
źródło
Możesz spróbować:
źródło
Możesz po prostu użyć istniejących standardowych metod bibliotecznych , jak pokazano tutaj:
Warto jednak użyć specjalnego konstruktora:
Podajesz rozmiar i lambda, które opisują, jak zainicjować wartości. Oto dokumentacja:
źródło
Zastanawiam się, dlaczego nikt nie udzielił najprostszych odpowiedzi:Zgodnie z jednym z komentarzy do mojej pierwotnej odpowiedzi, zdałem sobie sprawę, że działa to tylko wtedy, gdy jest użyte w argumentach adnotacji (co było dla mnie naprawdę nieoczekiwane).
Wygląda na to, że Kotlin nie pozwala na tworzenie literałów tablicowych poza adnotacjami.
Na przykład spójrz na ten kod, używając @Option z biblioteki args4j:
Argument opcji „aliasy” jest typu
Array<String>
źródło
W moim przypadku muszę zainicjować moje elementy szuflady. Dane wypełniam poniższym kodem.
Klasa niestandardowego modelu
źródło
Zadeklaruj tablicę int w globalnej
następnie metoda onCreate zainicjuje tablicę wartością
źródło
W Javie można zainicjować tablicę, taką jak:
Ale w Kotlin tablica została zainicjowana na wiele sposobów, takich jak:
Dowolny ogólny typ tablicy, której można użyć funkcji arrayOf () :
Za pomocą funkcji narzędziowych Kotlin można zainicjować tablicę
źródło
Prosta droga:
Dla liczby całkowitej:
var number = arrayOf <Int> (10, 20, 30, 40, 50)
Przechowuj wszystkie typy danych
var number = arrayOf (10, „string string”, 10.5)
źródło
zinicjalizuj tablicę w ten sposób:
val paramValueList : Array<String?> = arrayOfNulls<String>(5)
źródło
W ten sposób możesz zainicjować tablicę int w koltin.
źródło
Moja odpowiedź stanowi uzupełnienie @maroun. Oto kilka sposobów na zainicjowanie tablicy:
Użyj tablicy
Użyj ścisłej tablicy
Mieszaj rodzaje matryc
Zagnieżdżanie tablic
Możliwość rozpoczęcia od kodu dynamicznego
źródło