kotlin - 如何用范围填充可变参数?
问题描述
什么是填充可变参数的正确方法?我的尝试看起来像拳头我构造范围
然后我将其转换为列表
然后转换为 intarray
然后传播它
m.getColumns(*((count.. count + 35).toList().toIntArray()))
其中 getColums 是一种接受列索引作为可变参数的方法
解决方案
是的,从这个意义上说,范围离数组真的很远,很难将它们作为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())
推荐阅读
- firebase - Navigator 在按钮单击颤动的异步调用完成之前推送一个新页面
- java - 在没有组合的情况下扩展两个 java 类
- download - 使用 wget 递归下载目录内容
- javascript - 隐式接受参数的函数
- oracle - 在 oracle 中使用子查询创建计算字段
- javascript - 使用 WebAudio API 时音频和视频 HTML5 元素中的音频被静音
- c# - 通过使用 LINQ 指定祖先节点从节点获取所有属性值
- flutter - 如何在 Flutter 中向此类添加参数?
- swift - 快速定位嵌套数组中数据的最佳方法
- android - 有没有办法从左到右改变元素颜色?