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)
您的算法只会比较数组中彼此相邻的项目(位置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)