如何在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<String>) { val arr = arrayOf(1, 2, 3); for (item in arr) { println(item); } }
您还可以使用操场来testing语言function。
值得一提的是,当使用kotlin内build函数(例如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
我们也可以创build具有内置函数的数组,
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()
或任何基元types来代替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代表默认值(初始化)
我认为值得一提的是,从文档中不够直观的一点是,当使用工厂函数来创build数组并且指定它的大小时,数组将使用与其索引值相等的值进行初始化。 例如,在这样一个数组中: 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
我认为第一个select是更可读一点。 两者都有效。
你可以试试这个:
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-
class DrawerItem(var icon: Int, var name: String) { }
以这种方式初始化数组: val paramValueList : Array<String?> = arrayOfNulls<String>(5)