【发布时间】:2018-12-04 09:14:27
【问题描述】:
我有以下代码。
var myArray : [String] = ["1", "2", "3", "4", "5"]
for var i in 0..<myArray.count {
print("i==\(i)==\(myArray[i])")
myArray.remove(at: i)
i = i-1
}
日志如下。
i==0==1
i==1==3
i==2==5
fatal error: Index out of range
我期待的日志是
i==0==1
i==0==2
i==0==3
i==0==4
i==0==5
我这样说是因为当我在 for 循环中设置 i=i-1 时,i 将始终为 0。
这意味着变量i没有代码i=i-1的影响
知道为什么会这样吗?
与我在 java 中的代码相同,并且运行良好。
ArrayList<String> mm = new ArrayList<>();
mm.add("1");
mm.add("2");
mm.add("3");
mm.add("4");
mm.add("5");
for(int i=0; i<mm.size(); i++){
Log.d("mm", "i=="+i+"=="+mm.get(i));
mm.remove(i);
i = i-1;
}
我的日志如下
i==0==1
i==0==2
i==0==3
i==0==4
i==0==5
【问题讨论】:
-
“我这样说是因为当我在 for 循环中设置 i=0 时,它不应该出现在第二个循环中。” 为什么不呢?顺便说一句,这是您的代码的正确输出。
-
您需要逆序迭代您的收藏
-
@RakeshaShastri:我已经更新了问题...请检查...
-
顺便说一句,该代码只是对语言的假设实验还是应该在实际项目中使用?因为从您当前正在迭代的集合中删除元素,同时通过索引访问它总是一个坏主意。