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

时间:2015-05-06 12:15:06

标签: objective-c cocoa core-data nspredicate

我真的很难理解这些3.看起来ANYSOME做同样的事情,但我看不出与ALL的区别

2 个答案:

答案 0 :(得分:10)

我们有一个小组列表。每个小组都有类型的成员。每个人都有一个年龄。

所有members.age> 30

表示您会找到一个成员年龄均超过30岁的小组。您将找不到至少有一名成员年龄在30岁以下的小组。

ANY 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谓词,您将找到两个组,因为在两个组中至少有一个成员与谓词匹配。

答案 1 :(得分:5)

ALLANY是基本逻辑运算符。

ALL predicate的计算结果为true时,

predicate的计算结果为true 每个项目。

ANY predicate评估至少为1项时,

predicate的计算结果为真。

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

您可以在Predicate Programming Guide,章节汇总操作

中找到更多信息