从Array1中减去Array2中的值,同时保留剩余的重复项

时间:2012-03-03 23:12:59

标签: objective-c arrays

是否可以从一个NSMutableArray中减去另一个NSMutableArray中的值,同时保留任何剩余的类似值(保留重复副本)?我不想删除值的每个实例,只是1比1的减法。

我正在使用CGPoints。

数组1 CCP(1,1) CCP(1,1) CCP(1,2) CCP(1,3)

ARRAY2 CCP(1,1)

所需的输出:Array3 CCP(1,1) CCP(1,2) CCP(1,3)

1 个答案:

答案 0 :(得分:1)

抱歉,我之前没有正确理解你的问题。也许你可以尝试类似的东西:

NSMutableArray *points1 = [NSMutableArray arrayWithObjects:
                            [NSValue valueWithCGPoint:CGPointMake(1, 1)],
                            [NSValue valueWithCGPoint:CGPointMake(1, 1)],
                            [NSValue valueWithCGPoint:CGPointMake(1, 2)],
                            [NSValue valueWithCGPoint:CGPointMake(1, 3)], nil];

NSArray        *points2 = [NSArray arrayWithObject:
                            [NSValue valueWithCGPoint:CGPointMake(1, 1)]];

NSInteger index = NSNotFound;

for (NSValue *point in points2) {
    index = [points1 indexOfObject:point];

    if (NSNotFound != index) {
        [points1 removeObjectAtIndex:index];
    }
}

NSLog(@"%@", points1);

=> 2012-03-04 00:02:26.376 foobar[19053:f803] (
       "NSPoint: {1, 1}",
       "NSPoint: {1, 2}",
       "NSPoint: {1, 3}"
   )

更新

NSNotFoundNSObjCRuntime.h中定义。你可以通过命令+点击Xcode中的符号NSNotFound来找到它。

定义是

 enum {NSNotFound = NSIntegerMax};

我知道使用它的原因是查看indexOfObject:方法的NSArray文档,其中包含:

  

返回值
  最低索引,其对应的数组值等于anObject。如果数组中的所有对象都不等于anObject,则返回NSNotFound