You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift:如何在for循环中删除遍历所用的原数组元素?

问题原因

Swift 中使用 for...in 遍历数组时,会创建原数组的不可变快照副本。循环过程中对原数组的修改(比如 removeLast())不会影响这个快照的遍历流程——你的代码在循环启动时就拿到了包含全部6个元素的快照,所以哪怕原数组不断被缩短,遍历还是会把快照里的所有元素都输出一遍。

解决方案

方法1:用 while 循环控制遍历次数

通过数组的长度来控制循环终止条件,确保只输出前3个元素并同步删除尾部元素:

var letters = ["a", "b", "c", "d", "e", "f"]
// 目标是保留前3个元素,所以当数组长度大于3时继续循环
while letters.count > 3 {
    print(letters.first!)
    letters.removeLast()
}

执行后输出 a、b、c,最终数组变为 ["a", "b", "c"],符合预期。

方法2:遍历数组的前缀序列

直接遍历原数组的前3个元素的前缀序列,同时修改原数组:

var letters = ["a", "b", "c", "d", "e", "f"]
for element in letters.prefix(3) {
    print(element)
    letters.removeLast()
}

prefix(3) 会生成原数组前3个元素的临时序列,循环仅执行3次,每次删除原数组的最后一个元素,最终效果和方法1一致。

方法3:指定遍历次数并同步修改

直接指定遍历次数,基于原数组的索引访问元素,同时修改原数组:

var letters = ["a", "b", "c", "d", "e", "f"]
// 仅遍历前3个元素的索引
for index in 0..<3 {
    print(letters[index])
    letters.removeLast()
}

这种方式逻辑直接,适合明确知道需要遍历次数的场景。

内容的提问来源于stack exchange,提问作者Shay Dans

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 12:45:29