方法一:enumerateObjectsUsingBlock
例子:
[mutableArr enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
if (obj不符合某条件) {
[mutableArr removeObject:obj];
}
}];
存在的问题:这种方式,删除一个元素时,正常。删除多个元素时,是异常的。(会出现索引跳位)
方法二:forin
例子:
for(int i=0; i < [array count]; i++){
if(YES){
[array removeObjectAtIndex:i];
i--;
}
}
存在的问题:这种方式,会出现crash。
方式三:while循环
例子:
while(array.count>0)
{
obj = [array objectAtIndex:0];
//判断处理
…
//remove
[array removeObjectAtIndex:0];
}
存在的问题:while循环判断条件不好把控。
最好还是把需要删除的内容,筛选出来放到一个array中,然后再把这些需要删除的统一从原始数组中删除。如下面这个网页提供的做法:
NSMutableArray *discardedItems = [NSMutableArray array];
SomeObjectClass *item;
for (item in originalArrayOfItems) {
if ([item shouldBeDiscarded])
[discardedItems addObject:item];
}
[originalArrayOfItems removeObjectsInArray:discardedItems];
网友评论