La documentation cache quelque peu la réponse. Au lieu de donner un exemple de code source, ils mentionnent la fonction (obsolète) array()dans un commentaire latéral: Pour créer un tableau, nous pouvons utiliser un tableau de fonctions de bibliothèque () et lui transmettre les valeurs des éléments, de sorte que le tableau (1, 2, 3 ) crée un tableau [1, 2, 3].
Lars Blumberg
8
Bien que j'aime Kotlin mais j'ai dit que la "documentation Kotlin" n'est pas assez bonne (j'ai appris plus sur d'autres sites que kotlinlang.org).
Hassan Tareq
1
Parfois aussi, vous voulez juste un intRange que vous pourriez faire: val numbers = 1..5ce qui donne une plage d'int 1 à 5.
Est-il préférable d'utiliser intArrayOfplus arrayOf? A donc IntArraydes avantages sur Array<Int>?
Lars Blumberg
17
@LarsBlumberg IntArray est égal à int [], Array <Int> est identique à Integer []
user2235698
3
L'initialisation d'une liste est très similaire:listOf(10, 20, 30, 40, 50)
Cristan
Lorsque j'utilise la fonction intArrayOf (), je fais face Exception in thread "main" java.lang.NoClassDefFoundError: kotlin/KotlinPackage. J'utilise jdk1.8.0_241et Intellij IDEA
TeachMeJava
92
À noter que lors de l' utilisation builtines de Kotlin (par exemple intArrayOf(), longArrayOf(), arrayOf(), etc.) , vous n'êtes pas en mesure d'initialiser le tableau avec des valeurs par défaut (ou toutes les valeurs à la valeur désirée) pour une taille donnée, au lieu que vous devez faire initialize par appel selon constructeur de la classe .
// 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}
Cette deuxième valeur par défaut init utilisant le lambda était super utile! Merci
rf43
9
La deuxième forme d'initialisation peut s'écrire: IntArray(N) {i -> 2}et même (lors de l'initialisation avec une constante)IntArray(N) {2}
David Soroko
1
Au lieu de i, nous pouvons utiliser "_" var arr = IntArray (N) {_ -> false}
Navas pk
1
Celui avec le lambda était exactement ce dont j'avais besoin pour initier un tableau avec une taille dynamique et une valeur par défaut non facultative. Merci!
mithunc
48
Voici un exemple:
fun main(args:Array<String>){val arr = arrayOf(1,2,3);for(item in arr){
println(item);}}
Vous pouvez également utiliser une aire de jeux pour tester les fonctionnalités du langage.
Cela aide si vous donnez des exemples pour initin Array<Int>()et IntArray(), votre réponse n'est pas très utile pour l'instant.
Lars Blumberg
La réponse a été modifiée
Ali hasan
Array <Int> vous donne un tableau d'entiers encadrés, tandis que IntArray vous donne un tableau int réel.
Mike
4
Langue Kotlin a des classes spécialisées pour représenter les tableaux de types primitifs sans boxe frais généraux: par exemple - IntArray, ShortArray, ByteArray, etc. Je besoin de dire que ces classes ont aucune relation d'héritage à la société mère Arrayclasse, mais ils ont le même ensemble de méthodes et propriétés. Chacun d'eux a également une fonction d'usine correspondante. Donc, pour initialiser un tableau avec des valeurs dans Kotlin, il vous suffit de taper ceci:
val myArr:IntArray= intArrayOf(10,20,30,40,50)
... ou de cette façon:
val myArr =Array<Int>(5,{ i ->((i+1)*10)})
myArr.forEach { println(it)}// 10, 20, 30, 40, 50
Je pense qu'une chose qui mérite d'être mentionnée et qui n'est pas suffisamment intuitive dans la documentation est que, lorsque vous utilisez une fonction d'usine pour créer un tableau et que vous spécifiez sa taille, le tableau est initialisé avec des valeurs égales à leurs valeurs d'index. Par exemple, dans un tableau comme celui - ci:
val array = Array(5, { i -> i })les valeurs initiales sont attribuées [0,1,2,3,4]et ne pas dire, [0,0,0,0,0]. C'est pourquoi à partir de la documentation, val asc = Array(5, { i -> (i * i).toString() })produit une réponse de["0", "1", "4", "9", "16"]
5 est la taille Int Array. la fonction lambda est la fonction init de l'élément. gamme 'it' dans [0,4], plus 1 gamme make dans [1,5]
la fonction d'origine est:
/**
* 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)...}
Vous pouvez simplement utiliser les méthodes de bibliothèque standard existantes , comme indiqué ici:
val numbers = intArrayOf(10,20,30,40,50)
Il peut être judicieux d'utiliser un constructeur spécial:
val numbers2=IntArray(5){(it +1)*10}
Vous passez une taille et un lambda qui décrivent comment initier les valeurs. Voici la documentation:
/**
* 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)
Je me demande pourquoi personne n'a donné la réponse la plus simple:
val array:Array<Int>=[1,2,3]
Selon l'un des commentaires de ma réponse d'origine, j'ai réalisé que cela ne fonctionne que lorsqu'il est utilisé dans les arguments d'annotations (ce qui était vraiment inattendu pour moi).
On dirait que Kotlin ne permet pas de créer des littéraux de tableau en dehors des annotations.
Par exemple, regardez ce code en utilisant @Option de la bibliothèque args4j:
@Option(
nom = "-h",
alias = ["--help", "-?"],
usage = "Afficher cette aide"
)
var help: Boolean = false
L'argument d'option "alias" est de type Array<String>
J'ai l'erreur suivante avec ce code: non pris en charge [Littéraux de collection en dehors des annotations]
Rémi P
Je n'ai jamais vu ça avant. Cette syntaxe est-elle nouvelle pour Kotlin?
Lars Blumberg
@LarsBlumberg, probablement, je viens de commencer à utiliser Kotlin récemment avec IntelliJ 2019.1 et j'ai initialisé un tableau de chaînes comme je l'ai montré et cela a fonctionné
hdkrus
@ RémiP, Bon point, je l'ai utilisé sur des arguments d'annotations. Mais cela signifierait que les littéraux de tableau fonctionnent dans certains contextes et dans d'autres non?
hdkrus
1
@hdkrus Pourquoi ne mettez-vous pas à jour votre réponse pour montrer comment l'initialisation du tableau fonctionne avec les annotations? Cela peut être utile pour de nombreux lecteurs de ces questions.
Lars Blumberg
1
Dans mon cas, j'ai besoin d'initialiser mes articles de tiroir. Je remplis les données par le code ci-dessous.
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)
Cela ne répond pas vraiment à la question de manière sensée.
Qwerp-Derp
Veuillez vérifier le commentaire dans lequel j'ai utilisé la fonction lambda pour ajouter des éléments.
Rahul
Cela semble toujours être un moyen compliqué de résoudre ce problème, du moins par rapport aux autres réponses. J'ai également regardé mon message précédent, et il semble dur rétrospectivement - je suis désolé.
Qwerp-Derp
C'est bien, pas de problème. J'ai juste essayé de répondre d'une manière qui a résolu mon problème, je n'ai pas comparé avec d'autres réponses. Je vous remercie!
Rahul
1
Déclarer un tableau int au niveau global
var numbers= intArrayOf()
méthode onCreate suivante initialise votre tableau avec une valeur
overridefun onCreate(savedInstanceState:Bundle?){super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)//create your int array here
numbers= intArrayOf(10,20,30,40,50)}
Bien que ce code puisse répondre à la question, fournir un contexte supplémentaire concernant pourquoi et / ou comment ce code répond à la question améliore sa valeur à long terme.
rollstuhlfahrer
1
En Java, un tableau peut être initialisé tel que:
int numbers[]= new int[]{10,20,30,40,50}
Mais dans Kotlin, un tableau a été initialisé de plusieurs façons, comme:
Tout type générique de tableau que vous pouvez utiliser la fonction arrayOf () :
val arr = arrayOf(10,20,30,40,50)val genericArray = arrayOf(10,"Stack",30.00,40,"Fifty")
En utilisant les fonctions utilitaires de Kotlin, un tableau peut être initialisé
Bien que ce code puisse répondre à la question, fournir un contexte supplémentaire concernant la manière et / ou la raison pour laquelle il résout le problème améliorerait la valeur à long terme de la réponse.
leopal
0
Ma réponse complète @maroun voici quelques façons d'initialiser un tableau:
Utilisez un tableau
val numbers = arrayOf(1,2,3,4,5)
Utilisez un tableau strict
val numbers = intArrayOf(1,2,3,4,5)
Mélanger les types de matrices
val numbers = arrayOf(1,2,3.0,4f)
Tableaux d'imbrication
val numbersInitials = intArrayOf(1,2,3,4,5)val numbers = arrayOf(numbersInitials, arrayOf(6,7,8,9,10))
array()
dans un commentaire latéral: Pour créer un tableau, nous pouvons utiliser un tableau de fonctions de bibliothèque () et lui transmettre les valeurs des éléments, de sorte que le tableau (1, 2, 3 ) crée un tableau [1, 2, 3].val numbers = 1..5
ce qui donne une plage d'int 1 à 5.Réponses:
Voir Kotlin - Types de base pour plus de détails.
Vous pouvez également fournir une fonction d'initialisation comme deuxième paramètre:
la source
intArrayOf
plusarrayOf
? A doncIntArray
des avantages surArray<Int>
?listOf(10, 20, 30, 40, 50)
Exception in thread "main" java.lang.NoClassDefFoundError: kotlin/KotlinPackage
. J'utilisejdk1.8.0_241
et Intellij IDEAÀ noter que lors de l' utilisation builtines de Kotlin (par exemple
intArrayOf()
,longArrayOf()
,arrayOf()
, etc.) , vous n'êtes pas en mesure d'initialiser le tableau avec des valeurs par défaut (ou toutes les valeurs à la valeur désirée) pour une taille donnée, au lieu que vous devez faire initialize par appel selon constructeur de la classe .la source
IntArray(N) {i -> 2}
et même (lors de l'initialisation avec une constante)IntArray(N) {2}
Voici un exemple:
Vous pouvez également utiliser une aire de jeux pour tester les fonctionnalités du langage.
la source
À Kotlin, il existe plusieurs façons.
Il suffit ensuite de donner une valeur initiale aux utilisateurs ou à une autre collection ou où vous le souhaitez.
Nous pouvons également créer un tableau avec des fonctions intégrées comme
Autrement
Vous pouvez également utiliser
doubleArrayOf()
ouDoubleArray()
ou n'importe quel type primitif au lieu de Int.la source
var arr = IntArray(size, { it * 1 } )
est le même quevar arr = IntArray(size){it}
En Kotlin nous pouvons créer une matrice en utilisant
arrayOf()
,intArrayOf()
,charArrayOf()
,booleanArrayOf()
,longArrayOf()
fonctions.Par exemple:
la source
Ancienne question, mais si vous souhaitez utiliser une plage:
Donne presque le même résultat que:
résultat: 10, 20, 30, 40, 50
Je pense que la première option est un peu plus lisible. Les deux fonctionnent.
la source
vous pouvez utiliser ces méthodes
exemple
init représente la valeur par défaut (initialiser)
la source
init
inArray<Int>()
etIntArray()
, votre réponse n'est pas très utile pour l'instant.Langue Kotlin a des classes spécialisées pour représenter les tableaux de types primitifs sans boxe frais généraux: par exemple -
IntArray
,ShortArray
,ByteArray
, etc. Je besoin de dire que ces classes ont aucune relation d'héritage à la société mèreArray
classe, mais ils ont le même ensemble de méthodes et propriétés. Chacun d'eux a également une fonction d'usine correspondante. Donc, pour initialiser un tableau avec des valeurs dans Kotlin, il vous suffit de taper ceci:... ou de cette façon:
Vous pouvez maintenant l'utiliser:
J'espère que cela t'aides.
la source
Je pense qu'une chose qui mérite d'être mentionnée et qui n'est pas suffisamment intuitive dans la documentation est que, lorsque vous utilisez une fonction d'usine pour créer un tableau et que vous spécifiez sa taille, le tableau est initialisé avec des valeurs égales à leurs valeurs d'index. Par exemple, dans un tableau comme celui - ci:
val array = Array(5, { i -> i })
les valeurs initiales sont attribuées[0,1,2,3,4]
et ne pas dire,[0,0,0,0,0]
. C'est pourquoi à partir de la documentation,val asc = Array(5, { i -> (i * i).toString() })
produit une réponse de["0", "1", "4", "9", "16"]
la source
Vous pouvez créer un tableau Int comme ceci:
5 est la taille Int Array. la fonction lambda est la fonction init de l'élément. gamme 'it' dans [0,4], plus 1 gamme make dans [1,5]
la fonction d'origine est:
Classe IntArray définie dans Arrays.kt
la source
Vous pouvez essayer ceci:
la source
Vous pouvez simplement utiliser les méthodes de bibliothèque standard existantes , comme indiqué ici:
Il peut être judicieux d'utiliser un constructeur spécial:
Vous passez une taille et un lambda qui décrivent comment initier les valeurs. Voici la documentation:
la source
Je me demande pourquoi personne n'a donné la réponse la plus simple:Selon l'un des commentaires de ma réponse d'origine, j'ai réalisé que cela ne fonctionne que lorsqu'il est utilisé dans les arguments d'annotations (ce qui était vraiment inattendu pour moi).
On dirait que Kotlin ne permet pas de créer des littéraux de tableau en dehors des annotations.
Par exemple, regardez ce code en utilisant @Option de la bibliothèque args4j:
L'argument d'option "alias" est de type
Array<String>
la source
Dans mon cas, j'ai besoin d'initialiser mes articles de tiroir. Je remplis les données par le code ci-dessous.
Classe de modèle personnalisé
la source
Déclarer un tableau int au niveau global
méthode onCreate suivante initialise votre tableau avec une valeur
la source
En Java, un tableau peut être initialisé tel que:
Mais dans Kotlin, un tableau a été initialisé de plusieurs façons, comme:
Tout type générique de tableau que vous pouvez utiliser la fonction arrayOf () :
En utilisant les fonctions utilitaires de Kotlin, un tableau peut être initialisé
la source
Manière simple:
Pour Integer:
nombre var = arrayOf <Int> (10, 20, 30, 40, 50)
Conserver tous les types de données
nombre var = arrayOf (10, "valeur de chaîne", 10,5)
la source
intialiser le tableau de cette manière:
val paramValueList : Array<String?> = arrayOfNulls<String>(5)
la source
De cette façon, vous pouvez initialiser le tableau int en koltin.
la source
Ma réponse complète @maroun voici quelques façons d'initialiser un tableau:
Utilisez un tableau
Utilisez un tableau strict
Mélanger les types de matrices
Tableaux d'imbrication
Possibilité de commencer avec du code dynamique
la source