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

cfi*_*her 8 cocoa core-data objective-c nspredicate

我真的很难理解这些3.看起来ANYSOME做同样的事情,但我没有看到它的区别ALL.

Ami*_*wad 11

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

所有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)
Run Code Online (Sandbox Code Playgroud)

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


Sul*_*han 5

ALL并且ANY是基本的逻辑运算符.

ALL predicatepredicate每个项目的计算结果为true时,计算结果为true.

ANY predicatepredicate至少1个项目的计算结果为true时,计算结果为true.

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

您可以在Predicate Programming Guide,Chapter Aggregate Operations中找到更多信息