Die Dokumentation verbirgt die Antwort etwas. Anstatt ein Quellcodebeispiel anzugeben, erwähnen sie die (veraltete) array()Funktion in einem Nebenkommentar: Um ein Array zu erstellen, können wir ein Bibliotheksfunktionsarray () verwenden und die Elementwerte an dieses übergeben, sodass das Array (1, 2, 3) ) erstellt ein Array [1, 2, 3].
Lars Blumberg
8
Ich mag zwar Kotlin, aber ich habe gesagt, "Kotlin-Dokumentation" ist nicht gut genug (ich habe mehr von anderen Websites als kotlinlang.org gelernt).
Hassan Tareq
1
Manchmal möchten Sie auch nur einen intRange, den Sie ausführen können: Dies val numbers = 1..5ergibt einen int-Bereich von 1 bis 5.
Ist es vorzuziehen, intArrayOfüber zu verwenden arrayOf? Hat also IntArrayVorteile gegenüber Array<Int>?
Lars Blumberg
16
@LarsBlumberg IntArray ist gleich int [], Array <Int> ist das gleiche wie Integer []
user2235698
3
Das Initialisieren einer Liste ist sehr ähnlich:listOf(10, 20, 30, 40, 50)
Cristan
Wenn ich die Funktion intArrayOf () verwende, stehe ich vor Exception in thread "main" java.lang.NoClassDefFoundError: kotlin/KotlinPackage. Ich benutze jdk1.8.0_241und Intellij IDEA
TeachMeJava
92
Erwähnenswert , dass , wenn Kotlin builtines (zB intArrayOf(), longArrayOf(), arrayOf(), etc.) , die Sie nicht in der Lage sind das Array mit den Standardwerten (oder alle Werte auf den gewünschten Wert) für eine bestimmte Größe zu initialisieren, anstatt Sie initialize über Aufruf nach Klassenkonstruktors tun müssen .
// 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}
Dieser zweite Standardwert init mit dem Lambda war super hilfreich! Danke
rf43
9
Die zweite Form der Initialisierung kann geschrieben werden als: IntArray(N) {i -> 2}und sogar (bei Initialisierung mit einer Konstanten)IntArray(N) {2}
David Soroko
1
Anstelle von i können wir "_" var arr = IntArray (N) {_ -> false}
Navas pk
1
Das mit dem Lambda war genau das, was ich brauchte, um ein Array mit dynamischer Größe und nicht optionalem Standardwert zu initiieren. Vielen Dank!
Mithunc
48
Hier ist ein Beispiel:
fun main(args:Array<String>){val arr = arrayOf(1,2,3);for(item in arr){
println(item);}}
Es ist hilfreich, wenn Sie Beispiele für initin Array<Int>()und IntArray()angeben. Ihre Antwort ist derzeit nicht sehr hilfreich.
Lars Blumberg
Die Antwort wurde geändert
Ali hasan
Array <Int> gibt Ihnen ein Array von Ganzzahlen in Kästchen, während IntArray Ihnen ein tatsächliches int-Array liefert.
Mike
4
Kotlin Sprache hat für die Darstellung von Arrays von primitiven Typen Klassen spezialisiert ohne Overhead - Boxen: zum Beispiel - IntArray, ShortArray, ByteArrayetc. Ich muß sagen , dass diese Klassen keinen Erbe Bezug auf die Eltern haben ArrayKlasse, aber sie haben den gleichen Satz von Methoden und Eigenschaften. Jeder von ihnen hat auch eine entsprechende Werksfunktion. Um ein Array mit Werten in Kotlin zu initialisieren, müssen Sie nur Folgendes eingeben:
val myArr:IntArray= intArrayOf(10,20,30,40,50)
... oder so:
val myArr =Array<Int>(5,{ i ->((i+1)*10)})
myArr.forEach { println(it)}// 10, 20, 30, 40, 50
Ich denke, eine Sache, die erwähnenswert und aus der Dokumentation nicht intuitiv genug ist, ist, dass, wenn Sie eine Factory-Funktion zum Erstellen eines Arrays verwenden und dessen Größe angeben, das Array mit Werten initialisiert wird, die ihren Indexwerten entsprechen. In einem Array wie diesem:
val array = Array(5, { i -> i })sind die zugewiesenen Anfangswerte [0,1,2,3,4]und sagen nicht , [0,0,0,0,0]. Deshalb ergibt sich aus der Dokumentation val asc = Array(5, { i -> (i * i).toString() })eine Antwort von["0", "1", "4", "9", "16"]
5 ist die Int-Array-Größe. Die Lambda-Funktion ist die Element-Init-Funktion. 'it'-Bereich in [0,4] plus 1 Make-Bereich in [1,5]
Ursprungsfunktion ist:
/**
* 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)...}
Sie können einfach die vorhandenen Standard - Bibliothek verwenden Methoden wie hier gezeigt:
val numbers = intArrayOf(10,20,30,40,50)
Es kann jedoch sinnvoll sein, einen speziellen Konstruktor zu verwenden:
val numbers2=IntArray(5){(it +1)*10}
Sie übergeben eine Größe und ein Lambda, die beschreiben, wie die Werte initiiert werden. Hier ist die Dokumentation:
/**
* 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)
Ich frage mich, warum niemand die einfachsten Antworten gegeben hat:
val array:Array<Int>=[1,2,3]
Gemäß einem der Kommentare zu meiner ursprünglichen Antwort wurde mir klar, dass dies nur funktioniert, wenn es in Annotationsargumenten verwendet wird (was für mich wirklich unerwartet war).
Kotlin erlaubt anscheinend nicht, Array-Literale außerhalb von Annotationen zu erstellen.
Sehen Sie sich diesen Code beispielsweise mit @Option aus der args4j-Bibliothek an:
@Möglichkeit(
name = "-h",
Aliase = ["--help", "-?"],
usage = "Zeige diese Hilfe"
)
var help: Boolean = false
Das Optionsargument "Aliase" ist vom Typ Array<String>
Ich habe den folgenden Fehler mit diesem Code: Nicht unterstützt [Sammlungsliterale außerhalb von Anmerkungen]
Rémi P
Ich habe das noch nie gesehen. Ist diese Syntax für Kotlin neu?
Lars Blumberg
@LarsBlumberg, wahrscheinlich habe ich vor kurzem angefangen, Kotlin mit IntelliJ 2019.1 zu verwenden, und ich habe ein String-Array initialisiert, genau wie ich es gezeigt habe, und es hat funktioniert
hdkrus
@ RémiP, Guter Punkt, ich habe es für Annotationsargumente verwendet. Aber das würde bedeuten, dass Array-Literale in einigen Kontexten funktionieren und in anderen nicht?
HDKRUS
1
@hdkrus Warum aktualisieren Sie Ihre Antwort nicht, um zu zeigen, wie die Array-Initialisierung mit Anmerkungen funktioniert? Dies kann für viele Leser dieser Fragen von Wert sein.
Lars Blumberg
1
In meinem Fall muss ich meine Schubladenelemente initialisieren. Ich fülle die Daten mit dem folgenden Code.
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)
Dies beantwortet die Frage nicht wirklich auf vernünftige Weise.
Qwerp-Derp
Bitte überprüfen Sie den Kommentar, in dem ich die Lambda-Funktion zum Hinzufügen von Elementen verwendet habe.
Rahul
Dies scheint immer noch ein komplizierter Weg zu sein, um dieses Problem zu lösen, zumindest im Vergleich zu den anderen Antworten. Ich habe mir auch meine vorherige Nachricht angesehen und sie scheint im Nachhinein hart zu sein - es tut mir leid.
Qwerp-Derp
Das ist in Ordnung, kein Problem. Ich habe nur versucht, auf eine Weise zu antworten, die mein Problem gelöst hat. Ich habe es nicht mit anderen Antworten verglichen. Danke dir!
Rahul
1
Deklarieren Sie das int-Array auf global
var numbers= intArrayOf()
Die nächste onCreate-Methode initialisiert Ihr Array mit value
overridefun onCreate(savedInstanceState:Bundle?){super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)//create your int array here
numbers= intArrayOf(10,20,30,40,50)}
Während dieser Code die Frage möglicherweise beantwortet, verbessert die Bereitstellung eines zusätzlichen Kontexts darüber, warum und / oder wie dieser Code die Frage beantwortet, ihren langfristigen Wert.
Rollstuhlfahrer
1
In Java kann ein Array wie folgt initialisiert werden:
int numbers[]= new int[]{10,20,30,40,50}
Aber in Kotlin wurde ein Array auf viele Arten initialisiert, wie zum Beispiel:
Jeder generische Array-Typ, den Sie mit der Funktion arrayOf () verwenden können:
val arr = arrayOf(10,20,30,40,50)val genericArray = arrayOf(10,"Stack",30.00,40,"Fifty")
Mit den Utility-Funktionen von Kotlin kann ein Array initialisiert werden
Während dieser Code die Frage möglicherweise beantwortet, würde die Bereitstellung eines zusätzlichen Kontexts darüber, wie und / oder warum das Problem gelöst wird, den langfristigen Wert der Antwort verbessern.
Leopal
0
Meine Antwort ergänzt @maroun. Dies sind einige Möglichkeiten, ein Array zu initialisieren:
Verwenden Sie ein Array
val numbers = arrayOf(1,2,3,4,5)
Verwenden Sie ein striktes Array
val numbers = intArrayOf(1,2,3,4,5)
Mischen Sie Arten von Matrizen
val numbers = arrayOf(1,2,3.0,4f)
Verschachtelungsarrays
val numbersInitials = intArrayOf(1,2,3,4,5)val numbers = arrayOf(numbersInitials, arrayOf(6,7,8,9,10))
array()
Funktion in einem Nebenkommentar: Um ein Array zu erstellen, können wir ein Bibliotheksfunktionsarray () verwenden und die Elementwerte an dieses übergeben, sodass das Array (1, 2, 3) ) erstellt ein Array [1, 2, 3].val numbers = 1..5
ergibt einen int-Bereich von 1 bis 5.Antworten:
Weitere Informationen finden Sie unter Kotlin - Grundtypen .
Sie können auch eine Initialisierungsfunktion als zweiten Parameter bereitstellen:
quelle
intArrayOf
über zu verwendenarrayOf
? Hat alsoIntArray
Vorteile gegenüberArray<Int>
?listOf(10, 20, 30, 40, 50)
Exception in thread "main" java.lang.NoClassDefFoundError: kotlin/KotlinPackage
. Ich benutzejdk1.8.0_241
und Intellij IDEAErwähnenswert , dass , wenn Kotlin builtines (zB
intArrayOf()
,longArrayOf()
,arrayOf()
, etc.) , die Sie nicht in der Lage sind das Array mit den Standardwerten (oder alle Werte auf den gewünschten Wert) für eine bestimmte Größe zu initialisieren, anstatt Sie initialize über Aufruf nach Klassenkonstruktors tun müssen .quelle
IntArray(N) {i -> 2}
und sogar (bei Initialisierung mit einer Konstanten)IntArray(N) {2}
Hier ist ein Beispiel:
Sie können auch einen Spielplatz verwenden , um Sprachfunktionen zu testen.
quelle
In Kotlin gibt es mehrere Möglichkeiten.
Dann einfach Anfangswert von Benutzern oder aus einer anderen Sammlung oder wo immer Sie wollen.
Wir können auch Arrays mit eingebauten Funktionen wie erstellen
Ein anderer Weg
Sie können auch
doubleArrayOf()
oderDoubleArray()
oder einen beliebigen primitiven Typ anstelle von Int verwenden.quelle
var arr = IntArray(size, { it * 1 } )
ist das gleiche wievar arr = IntArray(size){it}
In Kotlin können wir Array erstellen
arrayOf()
,intArrayOf()
,charArrayOf()
,booleanArrayOf()
,longArrayOf()
Funktionen.Beispielsweise:
quelle
Alte Frage, aber wenn Sie einen Bereich verwenden möchten:
Ergibt fast das gleiche Ergebnis wie:
Ergebnis: 10, 20, 30, 40, 50
Ich denke, die erste Option ist etwas besser lesbar. Beide arbeiten.
quelle
Sie können diese Methoden verwenden
Beispiel
init repräsentiert den Standardwert (initialize)
quelle
init
inArray<Int>()
undIntArray()
angeben. Ihre Antwort ist derzeit nicht sehr hilfreich.Kotlin Sprache hat für die Darstellung von Arrays von primitiven Typen Klassen spezialisiert ohne Overhead - Boxen: zum Beispiel -
IntArray
,ShortArray
,ByteArray
etc. Ich muß sagen , dass diese Klassen keinen Erbe Bezug auf die Eltern habenArray
Klasse, aber sie haben den gleichen Satz von Methoden und Eigenschaften. Jeder von ihnen hat auch eine entsprechende Werksfunktion. Um ein Array mit Werten in Kotlin zu initialisieren, müssen Sie nur Folgendes eingeben:... oder so:
Jetzt können Sie es verwenden:
Hoffe das hilft.
quelle
Ich denke, eine Sache, die erwähnenswert und aus der Dokumentation nicht intuitiv genug ist, ist, dass, wenn Sie eine Factory-Funktion zum Erstellen eines Arrays verwenden und dessen Größe angeben, das Array mit Werten initialisiert wird, die ihren Indexwerten entsprechen. In einem Array wie diesem:
val array = Array(5, { i -> i })
sind die zugewiesenen Anfangswerte[0,1,2,3,4]
und sagen nicht ,[0,0,0,0,0]
. Deshalb ergibt sich aus der Dokumentationval asc = Array(5, { i -> (i * i).toString() })
eine Antwort von["0", "1", "4", "9", "16"]
quelle
Sie können ein Int-Array wie folgt erstellen:
5 ist die Int-Array-Größe. Die Lambda-Funktion ist die Element-Init-Funktion. 'it'-Bereich in [0,4] plus 1 Make-Bereich in [1,5]
Ursprungsfunktion ist:
IntArray-Klasse, definiert in Arrays.kt
quelle
Sie können dies versuchen:
quelle
Sie können einfach die vorhandenen Standard - Bibliothek verwenden Methoden wie hier gezeigt:
Es kann jedoch sinnvoll sein, einen speziellen Konstruktor zu verwenden:
Sie übergeben eine Größe und ein Lambda, die beschreiben, wie die Werte initiiert werden. Hier ist die Dokumentation:
quelle
Ich frage mich, warum niemand die einfachsten Antworten gegeben hat:Gemäß einem der Kommentare zu meiner ursprünglichen Antwort wurde mir klar, dass dies nur funktioniert, wenn es in Annotationsargumenten verwendet wird (was für mich wirklich unerwartet war).
Kotlin erlaubt anscheinend nicht, Array-Literale außerhalb von Annotationen zu erstellen.
Sehen Sie sich diesen Code beispielsweise mit @Option aus der args4j-Bibliothek an:
Das Optionsargument "Aliase" ist vom Typ
Array<String>
quelle
In meinem Fall muss ich meine Schubladenelemente initialisieren. Ich fülle die Daten mit dem folgenden Code.
Benutzerdefinierte Modellklasse-
quelle
Deklarieren Sie das int-Array auf global
Die nächste onCreate-Methode initialisiert Ihr Array mit value
quelle
In Java kann ein Array wie folgt initialisiert werden:
Aber in Kotlin wurde ein Array auf viele Arten initialisiert, wie zum Beispiel:
Jeder generische Array-Typ, den Sie mit der Funktion arrayOf () verwenden können:
Mit den Utility-Funktionen von Kotlin kann ein Array initialisiert werden
quelle
Einfacher Weg:
Für Integer:
var number = arrayOf <Int> (10, 20, 30, 40, 50)
Halten Sie alle Datentypen
var number = arrayOf (10, "string value", 10.5)
quelle
Array auf folgende Weise initialisieren:
val paramValueList : Array<String?> = arrayOfNulls<String>(5)
quelle
Auf diese Weise können Sie das int-Array in koltin initialisieren.
quelle
Meine Antwort ergänzt @maroun. Dies sind einige Möglichkeiten, ein Array zu initialisieren:
Verwenden Sie ein Array
Verwenden Sie ein striktes Array
Mischen Sie Arten von Matrizen
Verschachtelungsarrays
Möglichkeit, mit dynamischem Code zu beginnen
quelle