Как инициализировать массив в Котлине?

В Java можно инициализировать массив, например:

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

Как выглядит инициализация массива Kotlin?

Ты можешь:

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

Подробнее см. Kotlin – Основные типы .

Вот пример:

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

Вы также можете использовать игровые площадки для тестирования языковых функций.

Стоит упомянуть, что при использовании kotlin builtines (например, intArrayOf() , longArrayOf() , arrayOf() и т. Д.) Вы не можете инициализировать массив со значениями по умолчанию (или всеми значениями для желаемого значения) для заданного размера, вместо этого вы необходимо выполнить инициализацию посредством вызова класса класса.

 // 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}) 

В Котлине есть несколько способов.

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

Тогда просто начальное значение от пользователей или из другой коллекции или где угодно.

 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 

Мы также можем создать массив со встроенной функцией like-

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

Другой путь

 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. 

Вы также можете использовать doubleArrayOf() или DoubleArray() или любой примитивный тип вместо Int.

вы можете использовать эти методы

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

пример

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

init представляет значение по умолчанию (инициализировать)

Я думаю, что одна вещь, заслуживающая упоминания и недостаточно интуитивная из документации, заключается в том, что при использовании фабричной функции для создания массива и указания его размера массив инициализируется значениями, равными их значениям индекса. Например, в массиве, таком как: val array = Array(5, { i -> i }) , начальные значения назначаются [0,1,2,3,4] и не говорят, [0,0,0,0,0] . Вот почему из документации val asc = Array(5, { i -> (i * i).toString() }) дает ответ от ["0", "1", "4", "9", "16"]

Старый вопрос, но если вы хотите использовать диапазон:

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

Допускается почти такой же результат, как:

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

результат: 10, 20, 30, 40, 50

Я думаю, что первый вариант немного читаем. Оба работают.

Вы можете попробовать следующее:

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

В моем случае мне нужно инициализировать элементы моего ящика. Я заполняю данные по коду.

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

Пользовательская модель класса-

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

intialize массив таким образом: val paramValueList : Array<String?> = arrayOfNulls<String>(5)

Вы можете создать Int-массив следующим образом:

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

5 – размер массива Int. лямбда-функция – это функция init элемента. 'it' находится в диапазоне [0,4], плюс 1 диапазон в [1,5]

функция происхождения:

  /** * 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) ... } 

Класс IntArray, определенный в Arrays.kt