2014-07-11 71 views
0

我有一个整数数组(精确到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-该数组已被随机填充,所以我冒昧地将其排序。

还有1件事。请不要说abt set,我想要独特的元素,但是当我使用SET时,请参阅condition1和2.我无法执行这些操作。的先前

回答

2
  1. 排序阵列(由升序或降序的intValue)通过每个元件
  2. 循环(从0到N-1)和计数数等于元件(其写入到equalNumbersCount)。
  3. 当前号码后变得不等于以前,看equalNumberCount和删除元素的必要数量(如果这计数> 1,甚至,删除所有,如果它是奇怪,只取出equalNumberCount - 1以前的元素)
  4. 复位equalNumberCount到0.

就是这样。测试,似乎工作正常:

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; 
     } 
    } 
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); 
+0

不工作,因为我说如果有甚至条款的对象 如2-5的在这里,都必须删除。 –