В Java можно инициализировать массив, например:
int numbers[] = new int[] {10, 20, 30, 40, 50}
Как выглядит инициализация массива Kotlin?
В Java можно инициализировать массив, например:
int numbers[] = new int[] {10, 20, 30, 40, 50}
Как выглядит инициализация массива Kotlin?
val numbers: IntArray = intArrayOf(10, 20, 30, 40, 50)
Смотрите Kotlin - Основные типы для деталей.
Стоит отметить, что при использовании встроенных средств kotlin (например, 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 }
Вот пример:
fun main(args: Array<String>) {
val arr = arrayOf(1, 2, 3);
for (item in arr) {
println(item);
}
}
Вы также можете использовать игровую площадку для проверки языковых возможностей.
В Котлине есть несколько способов.
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
Мы также можем создать массив со встроенной функцией, например -
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.
В Kotlin мы можем создать массив, используя функции arrayOf()
, intArrayOf()
, charArrayOf()
, booleanArrayOf()
, longArrayOf()
.
Например:
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)
вы можете использовать эти методы
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 представляет значение по умолчанию (initialize)
Старый вопрос, но если вы хотите использовать диапазон:
var numbers: IntArray = IntRange(10, 50).step(10).toList().toIntArray()
Уступает почти тот же результат, что и:
var numbers = Array(5, { i -> i*10 + 10 })
результат: 10, 20, 30, 40, 50
Я думаю, что первый вариант немного читаем. Оба работают.
Я думаю, что одна вещь, заслуживающая упоминания и недостаточно интуитивная из документации, заключается в том, что, когда вы используете функцию factory для создания массива и укажите его размер, массив инициализируется значениями, равными к их значениям индекса. Например, в массиве, таком как:
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"]
Вы можете создать Int Array следующим образом:
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
Вы можете попробовать следующее:
var a = Array<Int>(5){0}
Вы можете просто использовать существующие стандартные методы библиотеки, как показано здесь:
val numbers = intArrayOf(10, 20, 30, 40, 50)
Возможно, имеет смысл использовать специальный конструктор:
val numbers2 = IntArray(5) { (it + 1) * 10 }
Вы передаете размер и лямбду, которая описывает, как инициировать значения. Вот документация:
/**
* 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)
В моем случае мне нужно инициализировать элементы моего ящика. Я заполняю данные ниже кода.
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)
Пользовательский класс модели -
class DrawerItem(var icon: Int, var name: String) {
}
Объявите массив int в глобальном
var numbers= intArrayOf()
следующий метод onCreate инициализирует ваш массив значением
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)
}
Язык Kotlin имеет специализированные классы для представления массивов примитивных типов без накладных расходов на IntArray
: например, IntArray
, ShortArray
, ByteArray
и т.д. Я должен сказать, что эти классы не имеют отношения наследования к родительскому классу Array
, но они имеют одинаковый набор методы и свойства. Каждый из них также имеет соответствующую заводскую функцию. Итак, чтобы инициализировать массив со значениями в Kotlin, вам просто нужно ввести это:
val myArr: IntArray = intArrayOf(10, 20, 30, 40, 50)
... или так:
val myArr = Array<Int>(5, { i -> ((i+1) * 10) })
myArr.forEach { println(it) } // 10, 20, 30, 40, 50
Теперь вы можете использовать его:
myArr[0] = (myArr[1] + myArr[2]) - myArr[3]
Надеюсь это поможет.
Мне интересно, почему никто просто не дал самые простые ответы:
val array: Array<Int> = [1, 2, 3]
Согласно одному из комментариев к моему первоначальному ответу, я понял, что это работает только при использовании в аргументах аннотаций (что было действительно неожиданно для меня).
Похоже, что Kotlin не позволяет создавать литералы массива вне аннотаций.
Например, посмотрите на этот код, используя @Option из библиотеки args4j:
@Option( name = "-h", aliases = ["--help", "-?"], usage = "Show this help" ) var help: Boolean = false
Аргумент опции "aliases" имеет тип Array<String>
intialize array следующим образом: val paramValueList : Array<String?> = arrayOfNulls<String>(5)
Arrays
Arrays in Kotlin aren't native objects, but instances of the Array class. This is a generic class, see Chapter 8 for a full account of Generics, and you can create arrays of any other type. Creating an array is slightly different in Kotlin in that you have to call a constructor or a factory function that makes the array. Kotlin arrays my be slightly different, but they are JVM Java arrays and work in exactly the same way under the cover.
The arrayOf function takes a list of values all of the same type and returns them as an array.
For example to create an array of three integers you would use:
var a=arrayOf(1,2,3)
The array type has get and set functions which accept and index but these are also mapped to the [] operator and so you can write:
Int b=a[0]
a[0]=5
or
Int b=a.get(0)
a.set(0,5)
You can create an array of any type in the same way. For example:
var a=arrayOf(1.2,2.2,3.3)
creates an array of floats and
var a=arrayOf('a','b','c')