【发布时间】:2021-09-19 06:46:54
【问题描述】:
我正在将一些较旧的 Java 代码重构到 Kotlin。有一个函数可以返回 [a, b] 范围内 Kotlin IntArray 中元素所持有的最小值的索引。范围值默认为 0,数组大小默认为 1。
我想做一些类似...的事情
return data.minOf().indexOf()
...但仅在 data 的 a 和 b 索引之间进行迭代。
函数如下:
// data is the IntArray property that I'm looping through.
fun absMinIndex(a: Int = 0, b: Int = (data.size - 1)) : Int {
var minVal = data[a]
var minIndex = 0
for (i in (a + 1)..b) {
val e = data[i]
if (e < minVal) {
minVal = e
minIndex = i
}
}
return maxIndex
}
这个 [for 循环] 通过从不访问超出范围的索引以及不生成复制的数组/子数组很好地解决了这个问题。我想知道它是否可以做得“更漂亮”。
问题
是否有更惯用的 Kotlin 方法在不会对我当前解决方案的性能产生负面影响的范围内迭代数组?
为了清晰起见,编辑了一些代码。
【问题讨论】:
-
如果不引入 Ints 的装箱,我认为你不能让它更漂亮,这会影响性能。
标签: loops kotlin iterator idioms