如何在 Kotlin 中使用数组索引作为 start/end 点进行反向循环?

How to make reversed for loop with array index as a start/end point in Kotlin?

现在我正在尝试为 loop.The 做一个简单的反转方法 for(i in start downTo end)

但是,如果我使用数组作为 start/end 点呢?

你可以从最后一个通过取 size - 1 到 0 计算的索引循环,如下所示:

for (i in array.size - 1 downTo 0) {
    println(array[i])
}

更简单,使用 lastIndex 扩展 属性:

for (i in array.lastIndex downTo 0) {
    println(array[i])
}

或者您可以采用 indices 范围并将其反转:

for (i in array.indices.reversed()) {
    println(array[i])
}

除了第一个 之外,还有一些其他变体。

使用IntProgression.reversed:

for (i in (0..array.lastIndex).reversed())
    println("On index $i the value is ${array[i]}")

或使用withIndex() together with reversed()

array.withIndex()
        .reversed()
        .forEach{ println("On index ${it.index} the value is ${it.value}")}

或使用 for 循环相同:

for (elem in array.withIndex().reversed())
    println("On index ${elem.index} the value is ${elem.value}")

或者如果不需要索引

for (value in array.reversed())
    println(value)

留在这里以备不时之需

我创建了一个扩展函数:

public inline fun <T> Collection<T>.forEachIndexedReversed(action: (index: Int, T) -> Unit): Unit {
    var index = this.size-1
    for (item in this.reversed()) action(index--, item)
}