NSPredicate 中 ALL 、 ANY 和 SOME 运算符之间的区别

Difference between ALL , ANY and SOME operators in NSPredicate

我真的很难理解这 3 个。看起来 ANYSOME 做同样的事情,但我看不出 ALL 有什么不同。

ALLANY是基本的逻辑运算符。

ALL predicatepredicate 的计算结果为真时计算结果为真 每一项。

ANY predicatepredicate 对至少 1 项的计算结果为真时,ANY predicate 的计算结果为真。

请注意,您始终可以使用 ANY 表示 ALL 谓词,反之亦然,例如 ALL condition 等同于 NOT (ANY NOT(condition))

您可以在 Predicate Programming Guide 聚合操作

中找到更多信息

让我们列出一组。每个组都有 person 类型的成员。每个人都有年龄。

全部 members.age > 30

意味着你会找到一个成员都超过 30 岁的组。你不会找到一个组中至少有一个成员年龄在 30 岁或以下。

任何 members.age > 30

意味着你会找到一个至少有一个成员年龄超过 30 岁的组。你不会找到一个所有成员都在 30 岁或以下的组。

Group1      > 30
  Amin  45  YES
  Chris 29  NO
            ---
All         NO  (because Chris is too young)
Any         YES (because Amin is old enough)

Group2      > 30
  Amin  45  YES
  Foo   35  YES
            ---
All         YES (because all members are old enough)
Any         YES (because at least one member is old enough)


Group3      > 30
  Chris 29  NO
  Bar   21  NO
            ---
All         NO  (because at least one member is too young)
Any         NO  (because all members are too young)

使用 ALL 谓词可以找到 Group2,因为所有成员 (Amin, Foo) 都匹配该谓词。使用 ANY 谓词您将找到两个组,因为在两个组中至少有一个成员匹配谓词。