如何使用数组索引作为Kotlin中的起点/终点来进行反向循环?

Gal*_*dra 4 reverse for-loop kotlin

现在我正试图扭转一个循环.反向的简单方法是(我在开始向下结束)

但是,如果我使用数组作为起点/终点怎么办?

zsm*_*b13 6

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

for (i in array.size - 1 downTo 0) {
    println(array[i])
}
Run Code Online (Sandbox Code Playgroud)

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

for (i in array.lastIndex downTo 0) {
    println(array[i])
}
Run Code Online (Sandbox Code Playgroud)

或者您可以采取indices范围并反转它:

for (i in array.indices.reversed()) {
    println(array[i])
}
Run Code Online (Sandbox Code Playgroud)

  • 关于最后一个,带有 `reversed()` 的那个,会不会更慢,因为它会先反转数组,然后循环遍历它? (2认同)
  • 如果您查看字节码,它实际上转换为简单的索引迭代。不需要反转数组来遍历索引。 (2认同)

DVa*_*rga 5

除了zsmb13的第一个答案,还有其他一些变体。

使用IntProgression.reversed

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

withIndex()reversed()

array.withIndex()
        .reversed()
        .forEach{ println("On index ${it.index} the value is ${it.value}")}
Run Code Online (Sandbox Code Playgroud)

或使用for循环相同:

for (elem in array.withIndex().reversed())
    println("On index ${elem.index} the value is ${elem.value}")
Run Code Online (Sandbox Code Playgroud)

或者如果不需要索引

for (value in array.reversed())
    println(value)
Run Code Online (Sandbox Code Playgroud)