首页 文章

如何使用值初始化Kotlin中的数组?

提问于
浏览
138

在Java中,可以初始化数组,例如:

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

Kotlin的阵列初始化如何?

14 回答

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

    有关详细信息,请参阅Kotlin - Basic Types .

  • 1

    值得一提的是,当使用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 }
    
  • 166

    这是一个例子:

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

    您还可以使用playground来测试语言功能 .

  • 37

    在Kotlin有几种方法 .

    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 .

  • 5

    在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)
    
  • 3

    老问题,但如果您想使用范围:

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

    产量几乎与以下结果相同:

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

    结果:10,20,30,40,50

    我认为第一个选项更具可读性 . 两者都有效 .

  • 3

    你可以使用这种方法

    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表示默认值(初始化)

  • 42

    我认为有一点值得一提,并且isn 't intuitive enough from the documentation is that, when you use a factory function to create an array and you specify it'的大小,数组初始化的值等于它们的索引值 . 例如,在如下数组中: 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"] 的答案

  • 0

    您可以像这样创建一个Int数组:

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

    5是Int Array大小 . lambda函数是元素init函数 . '它'在[0,4]范围内,加上[1,5]中的1个范围

    起源功能是:

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

    Arrays.kt中定义的IntArray类

  • 2

    你可以试试这个:

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

    您可以使用现有的标准库methods,如下所示:

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

    但是使用特殊的构造函数可能有意义:

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

    您传递一个描述如何初始化值的大小和lambda . 这是文档:

    /**
     * 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)
    
  • 3

    在我的情况下,我需要初始化我的抽屉物品 . 我通过以下代码填写数据 .

    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) {
    
    }
    
  • 1

    在global处声明int数组

    var numbers= intArrayOf()
    

    next 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)
    }
    
  • 2

    以这种方式初始化数组: val paramValueList : Array<String?> = arrayOfNulls<String>(5)

相关问题