for循环中的iterator变量修改报错,如何将'i'设置为mutable可变变量?
Kotlin 中使用 for (i in array.indices) 语法遍历数组下标时,循环变量 i 是系统隐式声明的 不可变val变量,所以你在循环体内直接修改 i 的值会触发编译报错,你没法直接把这个隐式声明的变量改为可变类型。
以下是两种适配不同场景的解决方法:
方案1:使用while循环自行管理下标(适用于需要动态调整遍历进度的场景)
如果你修改下标是为了调整后续遍历的位置(比如回退、跳过指定数量的元素),直接改用while循环,手动声明可变的下标变量即可:
// 自行声明可变的下标变量i var i = 0 while (i < array.size) { if (array[i] == 10) { i -= 2 } // 循环末尾统一处理下标自增 i++ }
方案2:复制循环变量为可变副本(仅适用于无需调整遍历进度的场景)
如果你不需要改变遍历的整体进度,只是需要在当前轮次的逻辑中修改下标值做其他计算,可以把隐式的不可变i赋值给一个自定义的可变变量:
for (i in array.indices) { // 复制为可变变量,仅当前轮次生效 var mutableI = i if (array[mutableI] == 10) { mutableI -= 2 // 注意:此处修改的只是当前轮次的副本,不会影响下一轮循环的i值 } }
注意:如果有动态调整遍历进度的需求,不要使用for-in循环的写法,即使声明了可变副本也无法改变下一轮循环拿到的下标值。
内容的提问来源于stack exchange,提问作者alexbayker
相关产品推荐
相关产品推荐

