我发现了一些类似的代码(不仅仅是复制了奇怪的逻辑):
for(int counter = 0 ; counter < array.length() ; counter ++ ) {
array.removeObjectAtIndex(i);
counter -- ;
}
这是坏代码吗?假设没有原始方法可以清空整个数组,或者我们需要在删除每个元素后进行一些额外的清理,应该怎么做?
如果你从上到下,你就不需要了counter--
,而且效率更高,因为它不必在每次removeObjectAtIndex
调用时移动上面的数组元素。
干扰循环体内的循环计数器绝不是一个好主意。
尽管不知道是什么array
,但更好的方法是不断移除阵列头,直到阵列为空。
int length = array.length();
for(int counter = 0 ; counter < length ; counter++ )
{
array.removeObjectAtIndex(0);
}
嗯,首先要注意的是,在每个循环的末尾都有 acounter++
和 a counter--
。有效地相互抵消。
我怀疑初级程序员被教导 for 循环需要格式
for(int i=0;i<len;i++) {/*code*/}
按照这个逻辑,由于在循环中每次通过时数组的长度都会移动 1,因此他也需要 counter 递减(为了不产生假结果)。
for(int c=0;c<a.length();c++){a.remove(i);c--;}
如果您c--
从此实现中删除,您将只删除一半的索引。计数器会随着长度的下降而上升,实际上是在中途相遇。
现在是一种不同的实现,感觉不那么僵硬
for(;array.length()>0;){array.removeObjectAtIndex(i);}
// also this
for(;array.length();array.removeObjectAtIndex(i));
提到的OP.length()
可能效率低下,所以:
for(int len=array.length();len--;array.removeObjectAtIndex(i));
For's 非常强大,我个人发现它们在某些情况下被充分利用。
我同意 acraig5075 关于干扰循环体内的循环计数器的评论是坏习惯
我认为下面代码的自下而上方法可以正常工作
for(int counter = array.length - 1; counter >= 0; counter--)
{
array.removeObjectAtIndex(counter);
}