NSPredicate两个NSNumber阵列

Joh*_*n S 0 objective-c nspredicate ios

我在为搜索功能编写谓词时遇到了一些困难,并认为你需要帮助.所以基本上我有两个NSNumbers阵列.我希望我的谓词满足以下条件:

If a number's integerValue in array A matches any integerValue in array B.
Run Code Online (Sandbox Code Playgroud)

我不想为这个解决方案使用任何类型的循环.这是我到目前为止所拥有的

ANY integerValue == ANY //how do I pass the entire array here and ask for the integerValue of each member? 
Run Code Online (Sandbox Code Playgroud)

Mon*_*olo 5

ANY运算符将处理该问题.

由于从你的问题中有点难以说出哪个数组在正常的谓词用语中是"自我"的,所以我会在没有自己的情况下写出来:

NSArray *arrayA = @[@2, @3, @7];
NSArray *arrayB = @[@2, @4, @9];

NSPredicate *pred = [NSPredicate predicateWithFormat: @"ANY %@ IN %@", arrayA, arrayB];
Run Code Online (Sandbox Code Playgroud)

由于缺乏"自我",它必须nil作为对象进行评估,但是工作正常:

BOOL matched = [pred evaluateWithObject: nil];
Run Code Online (Sandbox Code Playgroud)

如果您希望谓词中包含"self",则可以输入:

NSPredicate *pred = [NSPredicate predicateWithFormat: @"ANY self IN %@", arrayB];
BOOL matched = [pred evaluateWithObject: arrayA];
Run Code Online (Sandbox Code Playgroud)

结果是一样的.

一个小概念评论

如果两个数组中都包含任何整数,则上面的谓词计算结果为true,这就是我如何阅读您的问题.

这意味着,从概念上讲,您似乎在测试两组数字是否相互交叉.NSSet方法 intersectsSet:检查,所以进行测试的另一种方法是将你的数字保持为集合并测试交集:

matched = [setA intersectsSet: setB];
Run Code Online (Sandbox Code Playgroud)

  • @matehat你是对的 - 我对这个集合的评论更具概念性,所以我编辑了答案来反映这一点. (2认同)