我有一个整数数组(确切地说是NSMutable数组),现在我希望数组有唯一的元素,但是有一个问题。
条件-1。如果有2个(偶数个)元素相似则需要删除这两个元素。 条件2。如果有3个(奇数个)元素,则数组中只剩下1个元素。
试图解决它时遇到了一些问题。 我试图用2个临时变量循环数组
for(int i =1;i<[tagArray count];i++){
int temp1 = [[tagArray objectAtIndex:i] intValue];
int temp2 = [[tagArray objectAtIndex:i-1] intValue];
if(temp1==temp2){
[tagArray removeObjectIdenticalTo:[tagArray objectAtIndex:i]];
[tagArray removeObjectAtIndex:i];
NSLog(@"%@",tagArray);
}
}
此代码可以工作,但是当数组中有很多元素时,我得到的输出不是所需的。 P.S-阵列已经被随机填充,所以我先冒昧地对它进行排序。
还有一件事。请不要说abt set,我想要独特的元素但是当我使用SET时看到条件1和2.我不能执行那些。
答案 0 :(得分:2)
equalNumberCount
并删除必要数量的元素(如果此计数> 1且均匀,则删除全部,如果是奇数,则仅删除equalNumberCount - 1
以前的元素)像这样的东西。经过测试,似乎工作正常:
NSMutableArray *arr = [@[@1, @4, @4, @2, @2, @3, @3, @3, @4, @4, @5] mutableCopy];
arr = [[arr sortedArrayWithOptions:NSSortStable usingComparator:^NSComparisonResult(id obj1, id obj2) {
return [obj1 compare:obj2];
}] mutableCopy];
uint countOfEqualElements = 1;
for (uint i = 1; i < arr.count; i++) {
NSNumber *n1 = arr[i-1];
NSNumber *n2 = arr[i];
if ( [n2 isEqualToNumber:n1]) {
countOfEqualElements++;
}
else if (countOfEqualElements > 1){
uint numToRemove = countOfEqualElements % 2 == 0 ? countOfEqualElements : countOfEqualElements - 1;
countOfEqualElements = 1;
NSRange r;
r.length = numToRemove;
r.location = i - numToRemove;
NSIndexSet * is = [NSIndexSet indexSetWithIndexesInRange:r];
[arr removeObjectsAtIndexes:is];
i -= numToRemove;
}
}
答案 1 :(得分:0)
虽然我还没有使用其他元素进行测试,但目前我认为这可能至少让你感兴趣。
NSArray *localArray = @[@"1",@"23",@"2",@"3",@"4",@"5",@"5",@"9",@"1",@"11",@"10",@"1",@"23",@"3"];
NSCountedSet *countedSet= [[NSCountedSet alloc] initWithArray:localArray];
NSMutableArray *arrayToCheck = [localArray mutableCopy];
for (id obj in [localArray mutableCopy])
{
if([countedSet countForObject:obj]==2)
{
[arrayToCheck removeObject:obj inRange:NSMakeRange([[localArray mutableCopy] indexOfObject:obj], [arrayToCheck count]-[[localArray mutableCopy] indexOfObject:obj])];
}
else if ([countedSet countForObject:obj]==3)
{
[arrayToCheck removeObject:obj inRange:NSMakeRange([[localArray mutableCopy] indexOfObject:obj], [arrayToCheck count]-[[localArray mutableCopy] indexOfObject:obj])];
[arrayToCheck addObject:obj];
}
}
localArray = [NSArray arrayWithArray:arrayToCheck];
NSLog(@" array is %@",localArray);