ANY 运算符将处理该问题。
由于从您的问题中很难说在正常谓词用语中哪个数组是“自我”,因此我将在没有自我的情况下编写它:
NSArray *arrayA = @[@2, @3, @7];
NSArray *arrayB = @[@2, @4, @9];
NSPredicate *pred = [NSPredicate predicateWithFormat: @"ANY %@ IN %@", arrayA, arrayB];
由于缺少“自我”,因此必须将其nil
作为对象进行评估,但这可以正常工作:
BOOL matched = [pred evaluateWithObject: nil];
如果您更喜欢在谓词中包含“自我”,您可以输入它:
NSPredicate *pred = [NSPredicate predicateWithFormat: @"ANY self IN %@", arrayB];
BOOL matched = [pred evaluateWithObject: arrayA];
结果是一样的。
一个小的概念性评论
如果两个数组中都包含任何整数,则上面的谓词评估为真,这就是我阅读您的问题的方式。
这意味着,从概念上讲,您似乎是在测试两组数字是否相互交叉。NSSet
的方法 intersectsSet:
会检查这一点,因此另一种进行测试的方法是将您的数字保持为集合并测试交叉点:
matched = [setA intersectsSet: setB];