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



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



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


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

660   14  

14 ответов:

вы можете:

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

посмотреть Котлин - Основные Типы для сведения.

вот пример:

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

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

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.

в Котлине мы можем создать массив с помощью 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: IntArray = IntRange(10, 50).step(10).toList().toIntArray()

дает почти тот же результат, что и:

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

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

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

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

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"]

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

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

5-это размер массива Int. лямбда-функция-это функция инициализации элемента. "это" диапазон в [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, определенный в массивах.КТ

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

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

}

вы можете попробовать это:

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 paramValueList : Array<String?> = arrayOfNulls<String>(5)

объявить массив int в global

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

Comments

    Ничего не найдено.