什么是填充可变参数的正确方法?我的尝试首先看起来像一个 bycile 我构造范围
然后我将它转换为列表
然后转换为 intarray
然后将它传播
m.getColumns(*((count.. count + 35).toList().toIntArray()))
Run Code Online (Sandbox Code Playgroud)
其中 getColums 是一种接受列索引作为可变参数的方法
是的,从这个意义上说,范围与数组相去甚远,将它们作为vararg参数传递是相当困难的。
您可以创建一个函数来IntArray更快地将它们转换为实例:
fun IntRange.toIntArray() = this.toList().toIntArray()
m.getColumns(*(count..count + 35).toIntArray())
Run Code Online (Sandbox Code Playgroud)
此转换的稍微更好的优化版本:
fun IntRange.toIntArray(): IntArray {
val size = this.last - this.first + 1
var current = this.first
return IntArray(size) { current++ }
}
Run Code Online (Sandbox Code Playgroud)
或者您可以定义一个重载函数,该函数接受一个IntRange并执行转换以调用原始函数:
fun getColumns(range: IntRange) = getColumns(*range.toList().toIntArray())
Run Code Online (Sandbox Code Playgroud)
同样,这也可以利用上面的转换方法来获得更好的性能:
fun getColumns(range: IntRange) = getColumns(*range.toIntArray())
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
749 次 |
| 最近记录: |