web-dev-qa-db-fra.com

Comment initialiser un tableau dans Kotlin avec des valeurs?

En Java, un tableau peut être initialisé tel que:

int numbers[] = new int[] {10, 20, 30, 40, 50}

A quoi ressemble l'initialisation du tableau de Kotlin?

162
Lars Blumberg
val numbers: IntArray = intArrayOf(10, 20, 30, 40, 50)

Voir Kotlin - Types de base pour plus de détails.

190
Maroun

Il est à noter que lorsque vous utilisez des structures Kotlin (par exemple, intArrayOf(), longArrayOf(), arrayOf(), etc.), vous ne pouvez pas initialiser le tableau avec les valeurs par défaut (ou toutes les valeurs sur la valeur souhaitée) pour une taille donnée. Vous devez l'initialiser via un appel selon constructeur de classe. 

// Array of integers of a size of N
val arr = IntArray(N)

// Array of integers of a size of N initialized with a default value of 2
val arr = IntArray(N) { i -> 2 }
49
vtor

Voici un exemple:

fun main(args: Array<String>) {
    val arr = arrayOf(1, 2, 3);
    for (item in arr) {
        println(item);
    }
}

Vous pouvez également utiliser un playground pour tester les fonctionnalités linguistiques.

38
shadeglare

À Kotlin, il y a plusieurs façons.

var arr = IntArray(size) // construct with only size

Il vous suffit ensuite de saisir la valeur des utilisateurs, d’une autre collection ou de n’importe où.

var arr = IntArray(size, { 0 } ) // construct with size and fill array with 0
var arr = IntArray(size, { it * 1 } ) // construct with size and fill with its index

Nous pouvons aussi créer un tableau avec une fonction intégrée comme-

var arr = intArrayOf(1, 2, 3, 4, 5) // create an array with 5 values

Autrement

var arr = Array(size, { 0 } ) // it will create an integer array
var arr = Array<String>(size, { "$it" } ) // this will create array with "0", "1", "2" and so on.

Vous pouvez également utiliser doubleArrayOf() ou DoubleArray() ou tout type de primitive au lieu de Int. 

29
HM Nayem

Dans Kotlin, nous pouvons créer un tableau en utilisant les fonctions arrayOf(), intArrayOf(), charArrayOf(), booleanArrayOf(), longArrayOf().

Par exemple:

var Arr1 = arrayOf(1,10,4,6,15)  
var Arr2 = arrayOf<Int>(1,10,4,6,15)  
var Arr3 = arrayOf<String>("Surat","Mumbai","Rajkot")  
var Arr4 = arrayOf(1,10,4, "Ajay","Prakesh")  
var Arr5: IntArray = intArrayOf(5,10,15,20)  
15
RS Patel

Ancienne question, mais si vous souhaitez utiliser une plage:

var numbers: IntArray = IntRange(10, 50).step(10).toList().toIntArray()

Donne presque le même résultat que:

var numbers = Array(5, { i -> i*10 + 10 })

résultat: 10, 20, 30, 40, 50

Je pense que la première option est un peu plus lisible. Les deux fonctionnent.

5
Brooks DuBois

vous pouvez utiliser cette méthode

var numbers=Array<Int>(size,init)
var numbers=IntArray(size,init)
var numbers= intArrayOf(1,2,3)

exemple

var numbers = Array<Int>(5, { i -> 0 })

init représente la valeur par défaut (initialize)

4
Ali hasan

Vous pouvez créer un tableau Int comme ceci:

val numbers = IntArray(5, { 10 * (it + 1) })

5 est la taille du tableau interne. la fonction lambda est la fonction élément init. 'it' range dans [0,4], plus 1 marque range 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.
 */
 public class IntArray(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)
  ...
 }

Classe IntArray définie dans le tableau Arrays.kt

3
zyc zyc

Je pense qu’une chose qui mérite d’être mentionnée et qui n’est pas assez intuitive de la documentation est que, lorsque vous utilisez une fonction 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 tel que celui-ci: val array = Array(5, { i -> i }), les valeurs initiales attribuées sont [0,1,2,3,4] et non pas, [0,0,0,0,0]. C’est pourquoi, dans la documentation, val asc = Array(5, { i -> (i * i).toString() }) génère une réponse de ["0", "1", "4", "9", "16"]

3
Alf Moh

Vous pouvez simplement utiliser la bibliothèque standard existante méthodes comme indiqué ici:

val numbers = intArrayOf(10, 20, 30, 40, 50)

Toutefois, il peut être judicieux d’utiliser un constructeur spécial:

val numbers2 = IntArray(5) { (it + 1) * 10 }

Vous transmettez une taille et un lambda décrivant comment initialiser 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)
2
s1m0nw1

Vous pouvez essayer ceci: 

var a = Array<Int>(5){0}
2
kulst

Je me demande pourquoi personne n'a simplement donné la plus simple des réponses:

val array: Array<Int> = [1, 2, 3]

Selon l'un des commentaires à ma réponse initiale, j'ai réalisé que cela ne fonctionne que 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 (
 Name = "-h", 
 Alias ​​= = ""help", "-?"], 
 utilisation = "Afficher cette aide" 
) 
 var help: Boolean = false 
 

L'argument d'option "alias" est de type Array<String>

1
hdkrus

Le langage Kotlin a des classes spécialisées pour représenter des tableaux de types primitifs sans surcharge de boxe: par exemple, IntArray, ShortArray, ByteArray, etc. Je dois dire que ces classes n'ont pas de relation d'héritage la classe parent Array, mais ils ont le même ensemble de méthodes et de propriétés. Chacun d'entre 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

Maintenant vous pouvez l'utiliser: 

myArr[0] = (myArr[1] + myArr[2]) - myArr[3]

J'espère que cela t'aides.

1
ARGeo

Déclarer int array à global 

var numbers= intArrayOf()

la prochaine méthode onCreate initialise votre tableau avec une valeur

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    //create your int array here
    numbers= intArrayOf(10,20,30,40,50)
}
1
Nihal Desai

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. DrawerItem
    val drawerItems = Array<DrawerItem>(iconsArr.size, init = 
                         { index -> DrawerItem(iconsArr[index], names[index])})
    Log.d(LOGGER_TAG, "Number of items in drawer is: "+ drawerItems.size)

Modèle personnalisé

class DrawerItem(var icon: Int, var name: String) {

}
1
Rahul

initialiser le tableau de cette manière: val paramValueList : Array<String?> = arrayOfNulls<String>(5)

0
Abhilash Das