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

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

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

Kotlin的阵列初始化如何?

Lars Blumberg asked 2019-05-16T16:15:06Z

14个解决方案

166 votes

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

有关详细信息,请参阅Kotlin - 基本类型。

Maroun answered 2019-05-16T16:15:17Z

42 votes

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

vtor answered 2019-05-16T16:15:44Z

37 votes

这是一个例子:

fun main(args: Array) {

val arr = arrayOf(1, 2, 3);

for (item in arr) {

println(item);

}

}

您还可以使用游乐场来测试语言功能。

shadeglare answered 2019-05-16T16:16:12Z

24 votes

在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()或任何基本类型而不是Int。

HM Nayem answered 2019-05-16T16:17:09Z

9 votes

在Kotlin中,我们可以使用arrayOf(),intArrayOf(),charArrayOf(),booleanArrayOf(),longArrayOf()函数创建阵列。

例如:

var Arr1 = arrayOf(1,10,4,6,15)

var Arr2 = arrayOf(1,10,4,6,15)

var Arr3 = arrayOf("Surat","Mumbai","Rajkot")

var Arr4 = arrayOf(1,10,4, "Ajay","Prakesh")

var Arr5: IntArray = intArrayOf(5,10,15,20)

RS Patel answered 2019-05-16T16:17:38Z

5 votes

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

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

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

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

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

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

Brooks DuBois answered 2019-05-16T16:18:32Z

3 votes

你可以使用这种方法

var numbers=Array(size,init)

var numbers=IntArray(size,init)

var numbers= intArrayOf(1,2,3)

var numbers = Array(5, { i -> 0 })

init表示默认值(初始化)

Ali hasan answered 2019-05-16T16:19:11Z

3 votes

我认为有一点值得一提并且文档中不够直观的是,当您使用工厂函数创建数组并指定它的大小时,数组将使用等于其索引值的值进行初始化。 例如,在这样的数组中: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"]

Alf Moh answered 2019-05-16T16:19:44Z

3 votes

您可以像这样创建一个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类

zyc zyc answered 2019-05-16T16:20:36Z

2 votes

你可以试试这个:

var a = Array(5){0}

kulst answered 2019-05-16T16:21:01Z

2 votes

您可以简单地使用现有的标准库方法,如下所示:

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)

s1m0nw1 answered 2019-05-16T16:21:46Z

1 votes

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

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 i.e. 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 DrawerItem(var icon: Int, var name: String) {

}

Rahul answered 2019-05-16T16:22:22Z

1 votes

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

}

Nihal Desai answered 2019-05-16T16:23:03Z

0 votes

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

Abhilash Das answered 2019-05-16T16:23:35Z

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐