NSPredicate
在Foundation框架中,提供了一个NSPredicate类,可以指定过滤条件,通过指定的过滤条件可以对集合中的对象进行筛选过滤;
NSPredicate的查询方式类似于数据库的查询,可以使用比较和逻辑运算符,还可以使用一些关键字;
1 创建
+ (NSPredicate )predicateWithFormat:(NSString )predicateFormat;
2 使用
-(BOOL)evaluateWithObject:(id)object;
@property(nonatomic)int pid;
@property(nonatomic,copy)NSString name;
@property(nonatomic)int age;
Person *p1 = [[Person alloc]init];
p1.pid = 1;
p1.name = @”Tom”;
p1.age = 18;
Person *p2= [[Person alloc]init];
p1.pid = 2;
p1.name = @”James”;
p1.age = 20;
Person *p3 = [[Person alloc]init];
p1.pid = 3;
p1.name = @”Nick”;
p1.age = 25;
NSPredicate *pre = [NSPredicate predicateWithFormat:@”age = %d”, 20];
NSArray *array = @[p1,p2,p3];
for(Person *per in array) {
BOOL r = [pre evaluateWithObject:p2];
NSLog(@”%@”, r == 1?@”YES”:@”NO”);
}
- 数组过滤器
-(NSArray )filteredArrayUsingPredicate:(NSPredicate );
array = [array filteredArrayUsingPredicate:pre]
(覆盖下description)
-(NSString *)description {
return [NSString stringWithFormat:@”%d,%@,%d”,self.pid,self.name,self.age];
}
4. 格式说明符
%d %@; @k(key)
NSPredicate *pre = [NSPredicate predicateWithFormat:@”%k==%d && %k=%@”, @”age”,20,@”name”,@”tom”];
运算符:between self
字符串运算符:BEGINWITH/ENDWITH/CONTAINS/LIKE