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

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容