首页 > 解决方案 > 如何用范围填充可变参数?

问题描述

什么是填充可变参数的正确方法?我的尝试看起来像拳头我构造范围
然后我将其转换为列表
然后转换为 intarray
然后传播它

m.getColumns(*((count.. count + 35).toList().toIntArray()))

其中 getColums 是一种接受列索引作为可变参数的方法

标签: kotlin

解决方案


是的,从这个意义上说,范围离数组真的很远,很难将它们作为vararg参数传递。


您可以创建一个函数来IntArray更快地将它们转换为实例:

fun IntRange.toIntArray() = this.toList().toIntArray()

m.getColumns(*(count..count + 35).toIntArray())

此转换的稍微更好的优化版本:

fun IntRange.toIntArray(): IntArray {
    val size = this.last - this.first + 1
    var current = this.first
    return IntArray(size) { current++ }
}

或者您可以定义一个重载函数,该函数接受IntRange并进行转换以调用原始函数:

fun getColumns(range: IntRange) = getColumns(*range.toList().toIntArray())

同样,这也可以利用上面的转换方法来获得更好的性能:

fun getColumns(range: IntRange) = getColumns(*range.toIntArray())

推荐阅读