NSPredicate 中 ALL 、 ANY 和 SOME 运算符之间的区别
Difference between ALL , ANY and SOME operators in NSPredicate
我真的很难理解这 3 个。看起来 ANY
和 SOME
做同样的事情,但我看不出 ALL
有什么不同。
ALL
和ANY
是基本的逻辑运算符。
ALL predicate
在 predicate
的计算结果为真时计算结果为真
每一项。
ANY predicate
当 predicate
对至少 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 谓词您将找到两个组,因为在两个组中至少有一个成员匹配谓词。
我真的很难理解这 3 个。看起来 ANY
和 SOME
做同样的事情,但我看不出 ALL
有什么不同。
ALL
和ANY
是基本的逻辑运算符。
ALL predicate
在 predicate
的计算结果为真时计算结果为真
每一项。
ANY predicate
当 predicate
对至少 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 谓词您将找到两个组,因为在两个组中至少有一个成员匹配谓词。