在 NSPredicate 中使用 ALL/ANY/NONE

Posted

技术标签:

【中文标题】在 NSPredicate 中使用 ALL/ANY/NONE【英文标题】:Using of ALL/ANY/NONE in NSPredicate 【发布时间】:2014-10-29 11:21:31 【问题描述】:

当我们使用 ALL/ANY 等时,我正在尝试理解 NSPredicate 及其语法

我的班级人:

@interface Person : NSObject

@property (nonatomic, strong) NSString* name;
@property (nonatomic, strong) NSString* surname;
@property NSUInteger age;
@property NSUInteger weight;
@property NSUInteger height;

我将它用于这样的谓词:

NSArray* persons = [NSArray arrayWithObjects:personOne, personTwo, personThree, personFour, nil];

我的谓词:

NSPredicate* predicateEight = [NSPredicate predicateWithFormat:@"ANY SELF.age > %@", @55]; 
filteredArray = [persons filteredArrayUsingPredicate:predicateEight];
NSLog(@"Age > 55 %@", filteredArray);

我收到了一个错误:

ALL 或 ANY 运算符的左侧必须是 NSArray 或 NSSet

我需要如何更改我的代码? 提前感谢您的帮助。

【问题讨论】:

【参考方案1】:

应该是这样的:

NSPredicate* predicateEight = [NSPredicate predicateWithFormat:@"self.age > %d", 55];

【讨论】:

感谢您的回答,但它的经典使用。如果我想完全使用 ALL/ANY(以了解可以在哪里使用它),它会是什么样子?也许我需要添加一些结构?【参考方案2】:

;)

ALL/ANY 用于 NSArray 或 NSSet。在您的情况下,ANY 用于 Person 的实例。

任何使用示例:

NSPredicate* predicateEight = [NSPredicate predicateWithFormat:@"ANY SELF.age > %@", @55];
BOOL result = [predicateEight evaluateWithObject:persons];

如果你有人员数组(Array of Arrays):

NSArray* group1 = [NSArray arrayWithObjects:personOne, personTwo, personThree, nil];
NSArray* group2 = [NSArray arrayWithObjects:personFour, personFive, personSix, nil];
NSArray* group3 = [NSArray arrayWithObjects:personSeven, personEight, personNine, nil];

NSArray* groups = [NSArray group1, group2, group3, nil];

NSPredicate* predicateEight = [NSPredicate predicateWithFormat:@"ANY SELF.age > %@", @55];

NSArray* filteredArray = [groups filteredArrayUsingPredicate:predicateEight];

【讨论】:

Вадим, Вы бяка :) Но по теме, согласен ))))))))))

以上是关于在 NSPredicate 中使用 ALL/ANY/NONE的主要内容,如果未能解决你的问题,请参考以下文章

all ,any,abs的使用

使用 EXISTS、ALL、ANY 的 SQL 语句出现问题

SQL中的ALL,ANY,SOME的用法

linq All,Any,Contains,自定义比较器

MySQL - 此版本的 MySQL 尚不支持 'LIMIT & IN/ALL/ANY/SOME 子查询

LINQ 学习路程 -- 查询操作 Quantifier Operators All Any Contain