Loops 更改Kotlin中的循环索引
如何修改Kotlin中的循环变量 对于我的特殊情况,我有一个For循环,在这个循环中,对于某些条件,我想跳过下一次迭代:Loops 更改Kotlin中的循环索引,loops,for-loop,kotlin,Loops,For Loop,Kotlin,如何修改Kotlin中的循环变量 对于我的特殊情况,我有一个For循环,在这个循环中,对于某些条件,我想跳过下一次迭代: for(i in 0..n) { // ... if(someCond) { i++ // Skip the next iteration } } 但是,当我尝试此操作时,我被告知“无法重新分配val”。您不能更改当前元素,您需要使用while循环: var i = 0 while (i <= n) { // do something
for(i in 0..n) {
// ...
if(someCond) {
i++ // Skip the next iteration
}
}
但是,当我尝试此操作时,我被告知“无法重新分配val”。您不能更改当前元素,您需要使用
while
循环:
var i = 0
while (i <= n) {
// do something
if (someCond) {
i++ // Skip the next iteration
}
i++
}
旁注:。
范围是包括在内的,因此要循环浏览例如大小n
的列表,您通常需要0..(n-1)
,这更简单:使用0直到n
在您的特定情况下,您可以使用(Kotlin 1.2):
asSequence
将列表转换为序列
,消除了过滤器
和窗口化
创建新的列表
(因为它们现在都将返回序列
)
如果希望下一对不包含上一对的最后一个元素,请使用
窗口化(2,2,false)
。看起来您真正想做的是在列表上迭代大小为2的滑动窗口。如果您使用的是kotlin 1.2或更高版本,则可以使用List.windowed()
library函数
例如,考虑每一对相邻元素,但是丢弃其中的第二对元素是负的,那么你会这样做:
val list = listOf(1, 2, 3, -4, -5, 6)
list.windowed(2,1).filter { it[1] > 0 }.apply(::println)
哪个会打印出来
[[1, 2], [2, 3], [-5, 6]]
跳过了对[3,-4]和[-4,-5]请尝试此方法
for ((position, item) in list.withIndex()){
}
在这里,您将获得位置和对象。手头的任务涉及迭代相邻的元素对……因此循环与索引i和i+1一起工作。如果我发现关于I+1的某些东西,这意味着它不应该再被查看,那么这种情况就会发生。我可能会建议通过将I初始化为-1并使条件(++I@Kricket I添加了一种可能不完全符合您尝试的方法。这样做会在对之间循环,(0,1),(2,3),等等,但这对(1,2)是不起作用的。我必须说,他们使这一点变得不必要的复杂。Imo是Kotlin退步而不是进化的少数几个领域之一。
[[1, 2], [2, 3], [-5, 6]]
for ((position, item) in list.withIndex()){
}