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

Counting a range of Objects within a Subset of 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 只会比较整个 set/range.

这可能不是最有效的解决方案,但您可以遍历集合并检查每个对象是否在第二个集合中,直到您有 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);