我们想要删除数组中的符合条件的元素时,经常对数组进行遍历,然后删除。但是这其中更确隐藏着很大的问题。如果当初能够仔细的分析一下,也不会导致今天的错误了。
1.
2.
3.
4.
5.
6.
7.
8.
l
l
l
l
l
l
如果我们使用如下的循环方式:
- for (int i=0;i<[array count];i++) {
-
NSNumber *number = [array objectAtIndex:i]; -
CCLOG(@"number %d:%@ ",i,[number description]); -
if ([number intValue]==2||[number intValue]==1) { -
[array removeObject:number]; -
CCLOG(@"delete:%@ ",[number description]); -
} - }
l
l
l
l
l
- int num = [array count];
- for (int i=num-1;i>=0;i--) {
-
NSNumber *number = [array objectAtIndex:i]; -
CCLOG(@"number %d:%@ ",i,[number description]); -
if ([number intValue]==2||[number intValue]==1) { -
[array removeObjectAtIndex:i]; -
CCLOG(@"delete:%@ ",[number description]); -
} - }
本文深入探讨了在处理数组时,删除特定元素时容易遇到的问题,尤其是对于快速枚举的误解。通过实例分析,揭示了在删除元素过程中可能引发的数组计数和元素位置变化问题,提出了倒序删除和使用临时数组作为解决方案,旨在提高代码效率和避免潜在错误。
1029

被折叠的 条评论
为什么被折叠?



