iOS数组遍历时删除不符合条件元素

2018-12-06  本文已影响0人  沙漠绿洲1111

方法一: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];

上一篇下一篇

猜你喜欢

热点阅读