美文网首页
iOS数组遍历时删除不符合条件元素

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

作者: 沙漠绿洲1111 | 来源:发表于2018-12-06 11:42 被阅读0次

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

    相关文章

      网友评论

          本文标题:iOS数组遍历时删除不符合条件元素

          本文链接:https://www.haomeiwen.com/subject/zvwncqtx.html