在NSArray中检测多个对象

时间:2014-10-25 19:11:11

标签: objective-c macos nsarray

我有这样的数组:

NSArray *array = [NSArray arrayWithObjects:@"3", @"7", @"7", @"7", @"6", @"6", @"2", @"2", @"2", nil];    

我想删除@"7", @"7", @"7"@"2", @"2", @"2"。所以我想删除对象,只要它们重复三次而没有任何其他对象。

在Objective-C中有没有办法做到这一点?

1 个答案:

答案 0 :(得分:0)

试一试。我包含了一个参数,因此您可以过滤任意数量的重复。有足够的优化空间,但对于大多数情况来说它应该足够快。

-(NSArray *)filterArray:(NSArray *)array forRepeats:(NSUInteger)repeats {
    if ((NSInteger)repeats < 2) {
        return array;
    }
    NSMutableArray *filteredArray = [NSMutableArray arrayWithArray:array];
    BOOL remove;
    for (int i = 0; i <= filteredArray.count - repeats; i++) {
        remove = YES;
        for (int j = 1; j < repeats; j++) {
            NSString *str1 = [filteredArray objectAtIndex:i+j-1];
            NSString *str2 = [filteredArray objectAtIndex:i+j];
            if (![str1 isEqualToString:str2]) {
                remove = NO;
                break;
            }
        }
        if (remove) {
            for (int j = 0; j < repeats; j++) {
                [filteredArray removeObjectAtIndex:i];
            }
            --i;
        }
    }
    return filteredArray;
}

所以对你的情况来说:

NSArray *array = [NSArray arrayWithObjects:@"3", @"7", @"7", @"7", @"6", @"6", @"2", @"2", @"2", nil];
NSArray *filteredArray = [self filterArray:array forRepeats:3];