Scala的for循环中如何跳过某一次迭代?
Scala的Range本身是不可变集合,无法直接在遍历中修改迭代变量实现跳过,以下是几种对应实现方案:
- 方案1:for推导式加守卫(适合跳过固定值的场景)
如果你的需求只是跳过特定值的迭代,不需要动态跳过多位,直接在for推导式中加过滤条件即可,实现和C语言if(i==2) continue完全一致的效果:
for (i <- 0 until 10 if i != 2) { // 执行对应逻辑 }
- 方案2:使用Iterator手动控制遍历(适合动态调整迭代进度的场景)
如果需要实现类似你给出的C代码中遇到指定值就修改下标、跳过多位的需求,可以拿到Range的迭代器手动控制遍历进度,灵活性和C语言原生for循环一致:
val iter = (0 until 10).iterator while (iter.hasNext) { var i = iter.next() if (i == 2) { // 等价于C代码中的i +=1,也可以调用iter.next()直接跳过后续元素 i += 1 } // 执行对应逻辑 println(i) }
以上代码输出为0,1,3,4,5,6,7,8,9,和你给出的C代码执行效果完全一致,如果需要跳过多位,多次调用iter.next()即可。
- 方案3:提前对集合做过滤转换
也可以先对原Range做过滤处理,再遍历转换后的集合:
(0 until 10) .map(i => if (i == 2) i + 1 else i) .foreach { i => // 执行对应逻辑 }
内容的提问来源于stack exchange,提问作者WashingMachine
相关产品推荐
相关产品推荐

