NSMutableArray无法删除重复项

Jak*_*ins -1 sorting xcode objective-c duplicates nsmutablearray

我在我的数组中有重复,我想摆脱它们,所以我运行这个循环,但它不起作用.谁知道为什么?该阵列目前有3个项目,2个重复项和1个唯一项.

 for (int x = 0; x <= [array count]; x++) {
    if(x > 0){
        if([[array objectAtIndex:x - 1] isEqualToString:[array objectAtIndex:x]]){
            [array removeObjectAtIndex:x];
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Jos*_*ell 5

您的算法只会比较数组中彼此相邻的项目(位置x和项目x-1).如果重复项位于任何其他位置,则无法找到它们.

解决这个问题的天真方法是做一个双循环.将数组中的每个项目与其后的每个项目进行比较.随着阵列变大,这将花费很长时间.

正确的方法是让框架处理操作.将数组转换为集合(根据定义没有重复项),然后返回到数组:

NSSet * s = [NSSet setWithArray:array];
NSArray * dedupedArray = [s allObjects];
Run Code Online (Sandbox Code Playgroud)

如果你需要保留顺序,你必须以略微迂回的方式做到这一点,尽管这仍然比双循环更快:

NSMutableSet * itemsSeen = [NSMutableSet set];
NSMutableArray * dedupedArray = [NSMutableArray array];
for( id item in array ){
    if( ![itemsSeen containsObject:item] ){
        [itemsSeen addObject:item];
        [dedupedArray addObject:item];
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 你会怎么做_what_? (5认同)