如何从IntRange初始化Kotlin IntArray?

twe*_*per 1 kotlin

我正在尝试IntArray像这样在Kotlin中初始化一个:

intArrayOf(1..9)
Run Code Online (Sandbox Code Playgroud)

但我得到了TypeErrorInt是必需的,但我提供IntRange。有没有办法用范围初始化数组,还是我必须显式写出每个值?

zsm*_*b13 7

使用内置函数,这就是您如何从转到IntArray的方法IntRange

val array: IntArray = (1..9).toList().toIntArray()
Run Code Online (Sandbox Code Playgroud)

这有点浪费,因为它首先构造一个将所有元​​素放入的列表,然后再构造一个数组。要直接执行此操作,您可以使用自己的扩展程序,例如...

fun IntRange.toIntArray(): IntArray {
    if (last < first)
        return IntArray(0)

    val result = IntArray(last - first + 1)
    var index = 0
    for (element in this)
        result[index++] = element
    return result
}
Run Code Online (Sandbox Code Playgroud)

这将为您提供以下语法:

val array: IntArray = (1..9).toIntArray()
Run Code Online (Sandbox Code Playgroud)