在 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的主要内容,如果未能解决你的问题,请参考以下文章
使用 EXISTS、ALL、ANY 的 SQL 语句出现问题