Swift foor循环行为怪异
我有下面的代码Swift foor循环行为怪异,swift,for-loop,Swift,For Loop,我有下面的代码 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==0==2 i==0==3 i==0==4 i==0==5 我这样说是因为当我在for循环中设置I=I-1时,I将始终
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==0==2
i==0==3
i==0==4
i==0==5
我这样说是因为当我在for循环中设置I=I-1
时,I
将始终为0
这意味着变量i
不具有codei=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;
}
Swift for循环的工作方式与您想象的稍有不同
首先要注意的是,中
后面的位只计算一次。它不会在每次迭代中获得数组的计数<“我这样说是因为当我在for循环中设置I=0时,它不应该出现在第二个循环中。”为什么不呢?顺便说一句,这是代码的正确输出。这里的解释非常清楚:您需要反向迭代集合order@RakeshaShastri当前位置我更新了问题。。。请检查…顺便问一下,这段代码只是对语言的假设性实验,还是应该在实际项目中使用?因为在通过索引访问集合时,从当前正在迭代的集合中删除元素总是一个坏主意。第二件事是我想的。
。。所以,我想确认一下,这种行为是Swift的一部分。@FahimParkar它是Swift的一部分<在我所知道的大多数其他语言的循环中,
for…也有这种行为。循环的C风格不能做到这一点。
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