如何在Kotlin中初始化一个数组?
在Java中,可以初始化一个数组,例如:
int numbers[] = new int[] {10, 20, 30, 40, 50}
Kotlin的数组初始化是怎样的?
您可以:
val numbers: IntArray = intArrayOf(10, 20, 30, 40, 50)
有关详细信息,请参阅Kotlin – 基本types 。
这是一个例子:
fun main(args: Array) { val arr = arrayOf(1, 2, 3); for (item in arr) { println(item); } }
您还可以使用操场来测试语言function。
值得一提的是,当使用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})
在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(size, { "$it" } ) // this will create array with "0", "1", "2" and so on.
您也可以使用doubleArrayOf()
或DoubleArray()
或任何基元types来代替Int。
你可以使用这个方法
var numbers=Array(size,init) var numbers=IntArray(size,init) var numbers= intArrayOf(1,2,3)
例
var numbers = Array(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(5){0}
在我的情况下,我需要初始化我的抽屉项目。 我用下面的代码填充数据。
val iconsArr : IntArray = resources.getIntArray(R.array.navigation_drawer_items_icon) val names : Array = resources.getStringArray(R.array.navigation_drawer_items_name) // Use lambda function to add data in my custom model class ie DrawerItem val drawerItems = Array(iconsArr.size, init = { index -> DrawerItem(iconsArr[index], names[index])}) Log.d(LOGGER_TAG, "Number of items in drawer is: "+ drawerItems.size)
自定义模型class-
class DrawerItem(var icon: Int, var name: String) { }
以这种方式初始化数组: val paramValueList : Array
你可以像这样创建一个Int数组:
val numbers = IntArray(5, { 10 * (it + 1) })
5是Int数组大小。 lambda函数是元素init函数。 ‘它’在[0,4]范围内,加上1范围在[1,5]
起源function是:
/** * 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类