在java中我得到了这个结构
for (let i = 0; i < x.length-1; I++
Run Code Online (Sandbox Code Playgroud)
在这里为了避免outOfBoundsException我们使用x.length-1但是如何在 Kotlin 中做同样的事情?到目前为止我得到了这个代码
x.forEachIndexed { index, _ ->
output.add((x[index+1]-x[index])*10)
}
Run Code Online (Sandbox Code Playgroud)
当我们调用时它在最后一个元素上崩溃,x[index+1]所以我需要以某种方式处理最后一个元素
输入列表
var x = doubleArrayOf(0.0, 0.23, 0.46, 0.69, 0.92, 1.15, 1.38, 1.61)
Run Code Online (Sandbox Code Playgroud)
你已经有了答案,但这是另一种选择。如果您使用普通列表,则可以访问zipWithNext(),然后您无需担心任何索引,您可以执行以下操作:
list.zipWithNext { current, next ->
output.add((next - current)*10)
}
Run Code Online (Sandbox Code Playgroud)
正如 k314159 所提到的,我们还可以asList()直接访问zipWithNext和其他列表方法,没有很多缺点。
array.asList().zipWithNext { current, next ->
output.add(next - current)
}
Run Code Online (Sandbox Code Playgroud)
对于经典的 Java for 循环,Kotlin 中有两个选择。
一个会是这样的。
val x = listOf(1,2,3,4)
for (i in 0 .. x.lastIndex){
// ...
}
Run Code Online (Sandbox Code Playgroud)
使用..你基本上从 0 到(并包括)与第二项对应的数字,在本例中是列表的最后一个索引。(所以从0 <= i <= x.lastIndex)
第二个选项是使用until
val x = listOf(1,2,3,4)
for (i in 0 until x.size){
// ...
}
Run Code Online (Sandbox Code Playgroud)
这与之前的方法类似,只是until不包含最后一个元素。(因此来自0 <= i < x.size)。
你可能需要的是这样的东西
val x = listOf(1,2,3,4)
for (i in 0 .. x.lastIndex -1){
// ...
}
Run Code Online (Sandbox Code Playgroud)
或替代方案,使用until,像这样
val x = listOf(1,2,3,4)
for (i in 0 until x.size-1){
// ...
}
Run Code Online (Sandbox Code Playgroud)
这可能应该避免 IndexOut ofbounds 错误,因为您只是直到倒数第二个项目索引。
如果有不清楚的地方,请随时询问。
如果您想了解有关范围的更多信息,这也是一本很好的读物。https://kotlinlang.org/docs/ranges.html#progression
| 归档时间: |
|
| 查看次数: |
1218 次 |
| 最近记录: |