数组元素如何遍历的过程中删除

论坛 期权论坛 脚本     
匿名技术用户   2020-12-23 05:08   11   0

如果我们在循环中想要删除一个元素,那么将会导致在删除这一位后,这一位后面元素的数组下标全体改变,那么我们如果还按照没有删除元素的时候的方法继续进行访问,那势必会出现问题。

有两种解决方法:

1、将需要删除的元素下标记录下来,最后一并全体删除。

-(NSArray *)filterDatas:(NSArray *)datasource{
    
    if (!ARRAYHASVALUE(datasource)) {
        return nil;
    }
    NSMutableArray * arrayM = [NSMutableArray arrayWithArray:datasource];
    NSMutableArray * needDeleteDataM = [[NSMutableArray alloc] init];
    for (NSObject * object in arrayM) {
        // 需要删除的条件值
        BOOL isNeedDelete = YES;
        if (isNeedDelete) {
            [needDeleteDataM addObject:object];
        }
    }
    if (ARRAYHASVALUE(needDeleteDataM)) {
        for (NSObject * object in needDeleteDataM) {
            if ([arrayM containsObject:object]) {
                [arrayM removeObject:object];
            }
        }
    }
    return [arrayM copy];
}

2、在循环中就删除,但是要修改循环条件:

-(NSArray *)filterDatas:(NSArray *)datasource{
    if (!ARRAYHASVALUE(datasource)) {
        return nil;
    }
    NSMutableArray * arrayM = [NSMutableArray arrayWithArray:datasource];
    for (NSInteger index = 0; index < arrayM.count; index++) {
        // 需要删除的条件值
        BOOL isNeedDelete = YES;
        NSObject * object = [arrayM objectAtIndex:index];
        if (isNeedDelete) {
            [arrayM removeObject:object];
            index--;
        }
    }
    return [arrayM copy];
}
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP