计算NSSet子集内的一系列对象

时间:2017-01-06 02:14:34

标签: xcode subset nsset

我创建了几个具有特定坐标的NSSet:

CoordRange     = [[NSSet alloc] initWithObjects:[NSNumber numberWithInt:-1],
                 [NSNumber numberWithInt:-3],[NSNumber numberWithInt:-7],
                 [NSNumber numberWithInt:-5],nil];

我会在NSArray中收到几个坐标。我从数组(GRID)创建一个NSSet来使用NSSet的“isSubsetOfSet”函数。新的NSSet(GRID)可能包含CoordRange之外的值。有没有办法让我确定GRID是否包含来自CoordRange的至少四个值。

因此,如果GRID = [-1,-5,-7,-3,10],我有办法确定至少有四个值是否是CoordRange的子集? isSubSetOfSet只会比较整个集合/范围。

1 个答案:

答案 0 :(得分:1)

这可能不是最有效的解决方案,但您可以遍历Set并检查每个对象是否在第二组中,直到您有4个对象。

NSSet *coordRange     = [[NSSet alloc] initWithObjects:[NSNumber numberWithInt:-1],
                  [NSNumber numberWithInt:-3],[NSNumber numberWithInt:-7],
                  [NSNumber numberWithInt:-5],nil];
NSSet *grid = [NSSet setWithArray:@[@-1,@-2,@-7,@-3,@10]];

__block NSInteger count = 0;

[grid enumerateObjectsUsingBlock:^(id  _Nonnull obj, BOOL * _Nonnull stop) {
    if ([coordRange containsObject:obj]) count++;
    if (count >= 4) *stop = YES;
}];

NSLog(@"count: %lu", count);