#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSMutableArray * array = [NSMutableArray array];
for (int i = 0; i < 10; i++) {
Person * person = [[Person alloc]init];
if (i<5) {
person.name = [NSString stringWithFormat:@"lcq%d", i];
}else{
person.name = [NSString stringWithFormat:@"wxc%d", i];
}
person.age = @(20 + i);
[array addObject:person];
}
/** 1. 固定值筛选*/
NSPredicate * pradicate1 = [NSPredicate predicateWithFormat:@"age<25"];
for (Person *p in array) {
BOOL ret = [pradicate1 evaluateWithObject:p];
if (ret) {
NSLog(@"%@",p);
}
}
/* 打印结果
2016-01-13 14:50:31.485 谓词练习[4050:201773] name --lcq0, age---20
2016-01-13 14:50:31.487 谓词练习[4050:201773] name --lcq1, age---21
2016-01-13 14:50:31.487 谓词练习[4050:201773] name --lcq2, age---22
2016-01-13 14:50:31.487 谓词练习[4050:201773] name --lcq3, age---23
2016-01-13 14:50:31.487 谓词练习[4050:201773] name --lcq4, age---24
*/
/** 2.对数组过滤 */
NSPredicate * pradicate2 = [NSPredicate predicateWithFormat:@"age<25"];
NSArray * temp = [array filteredArrayUsingPredicate:pradicate2];
NSLog(@"%@", temp);
/*
可变数组的 filterUsingPredicate 是空的返回值 会直把满足条件的对象 加入到可变数组中
*/
/* 打印结果
2016-01-13 14:50:31.487 谓词练习[4050:201773] (
"name --lcq0, age---20",
"name --lcq1, age---21",
"name --lcq2, age---22",
"name --lcq3, age---23",
"name --lcq4, age---24"
)
*/
/** 3.使用占位符过滤 */
NSPredicate * pradicate3 = [NSPredicate predicateWithFormat:@"age < %d", 22];
for (Person *p in array) {
BOOL ret = [pradicate3 evaluateWithObject:p];
if (ret) {
NSLog(@"%@",p);
}
}
/* 打印结果
2016-01-13 14:51:50.980 谓词练习[4064:202565] name --lcq0, age---20
2016-01-13 14:51:50.980 谓词练习[4064:202565] name --lcq1, age---21
*/
/** 4.使用运算符过滤 例如 && AND || OR */
NSPredicate * pradicate4 = [NSPredicate predicateWithFormat:@"age > %d && age < %d", 22, 24];
for (Person *p in array) {
BOOL ret = [pradicate4 evaluateWithObject:p];
if (ret) {
NSLog(@"%@",p);
}
}
/* 打印结果
2016-01-13 14:54:11.564 谓词练习[4087:203511] name --lcq3, age---23
*/
/** 5.判断是否在某个范围内 */
NSPredicate * pradicate5 = [NSPredicate predicateWithFormat:@"name IN {'lcq3', 'wxc6'}"];
/*可以用数组的方式写
NSArray * inArr = @[@"lcq3", @"wxc6"];
NSPredicate * predicate = [NSPredicate predicateWithFormat:@"name IN %@", inArr];
*/
for (Person *p in array) {
BOOL ret = [pradicate5 evaluateWithObject:p];
if (ret) {
NSLog(@"%@",p);
}
}
/* 打印结果
2016-01-13 15:00:57.366 谓词练习[4117:206353] name --lcq3, age---23
2016-01-13 15:00:57.366 谓词练习[4117:206353] name --wxc6, age---26
*/
/** 6.判断是否以某个字符串开头 */
NSPredicate * pradicate6 = [NSPredicate predicateWithFormat:@"name BEGINSWITH 'lcq' "];
/*还有以某个字符串结尾
NSPredicate * pradicate6 = [NSPredicate predicateWithFormat:@"name ENDSWITH 'lcq' "];
还有包含某个字符串
NSPredicate * pradicate6 = [NSPredicate predicateWithFormat:@"name CONTAINS 'l' "];
还有可以模糊查询
NSPredicate * pradicate6 = [NSPredicate predicateWithFormat:@"name LIKE '*c*0' "];
条件的模糊查询方式
NSString * Pre = [NSString stringWithFormat:@"name like '*%@*'",@"c"];
NSPredicate * pradicate6 = [NSPredicate predicateWithFormat:Pre];
*/
for (Person *p in array) {
BOOL ret = [pradicate6 evaluateWithObject:p];
if (ret) {
NSLog(@"%@",p);
}
}
/* 打印结果
2016-01-13 15:12:57.786 谓词练习[4166:213385] name --lcq0, age---20
2016-01-13 15:12:57.786 谓词练习[4166:213385] name --lcq1, age---21
2016-01-13 15:12:57.786 谓词练习[4166:213385] name --lcq2, age---22
2016-01-13 15:12:57.786 谓词练习[4166:213385] name --lcq3, age---23
2016-01-13 15:12:57.786 谓词练习[4166:213385] name --lcq4, age---24
*/
}
return 0;
}