NSPredicate数组筛选
简书地址:http://www.jianshu.com/p/d346ee1bfe22
简述:Cocoa框架中的NSPredicate用于查询,原理和用法都类似于SQL中的where,作用相当于数据库的过滤取。
**条件查询一般是运用于按照条件要求将数组中符合条件的数据筛选出来形成一个新的数组,主要的功能大概如下:
代码,例如:
NSMutableArray *preditArray = [NSMutableArray array];
for (int i=0; i<8; i++) {
Bill *billList = [[Bill alloc] init];
billList.address = [NSString stringWithFormat:@"BeijingAve-%d", i];
billList.num = @(2 + i);
[preditArray addObject:billList];
}
**and or in 查询**
//将preditArray数组中num小于25大于20的模型取出组成一个新的数组
NSArray *arrayAnd = [preditArray filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"num>%d and num<%d" , 20, 25]];
//将preditArray数组中num小于22或者大于25的模型取出组成一个新的数组
NSArray *arrayOr = [preditArray filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"num > 25 || num < 22"]];
//将preditArray数组中address在BeijingAve-0到BeijingAve-5之间的模型取出组成一个新的数组
NSArray *arrayIn = [preditArray filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"address in {'BeijingAve-0', 'BeijingAve-5'}"]];
**重点内容**CONTAINS like 查询
NSArray *arrayCONTAINS = [preditArray filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"address CONTAINS '5'"]];
NSArray *array9 = [mutableArray filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"address like 'BeijingAve*'"]];
//根据UITextField输入的内容筛选
NSArray *arrayTextField = [preditArray filteredArrayUsingPredicate: [NSPredicate predicateWithFormat:@"address contains[c] %@",textField.text]];//单个条件
NSPredicate *p1 = [NSPredicate predicateWithFormat:@"address contains[c] %@", searchOneText];
NSPredicate *p2 = [NSPredicate predicateWithFormat:@"num contains[c] %@", searchTwoText];
NSPredicate *predicate = [NSCompoundPredicate orPredicateWithSubpredicates:@[p1, p2]];
NSArray *arrayTextField = [preditArray filteredArrayUsingPredicate:predicate];//多个 Or条件