我有这样的数组:
NSArray *array = [NSArray arrayWithObjects:@"3", @"7", @"7", @"7", @"6", @"6", @"2", @"2", @"2", nil];
我想删除@"7", @"7", @"7"
和@"2", @"2", @"2"
。所以我想删除对象,只要它们重复三次而没有任何其他对象。
在Objective-C中有没有办法做到这一点?
答案 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];