iOS开发 ☞ NSPredicate 谓词过滤

一、根据模型条件过滤数组

NSMutableArray *mArr = [[NSMutableArray alloc] init];
    TestModel *t1 = [[TestModel alloc] init];
    t1.age = @"1"; TestModel *t2 = [[TestModel alloc] init]; t2.age = @"3";
    TestModel *t3 = [[TestModel alloc] init];
    t3.age = @"19"; [mArr addObject:t1]; [mArr addObject:t2]; [mArr addObject:t3]; // NSPredicate *predicate = [NSPredicate predicateWithFormat:@"age = '19' || age = '3'"]; 
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"age like '19' || age like '3'"]; NSArray *receiveArr = [mArr filteredArrayUsingPredicate:predicate]; NSLog(@"%@",receiveArr);

模型属性为BOOL 或者 NSNumber

NSMutableArray *mArr = [[NSMutableArray alloc] init];
    Person *p = [[Person alloc] init];
    p.age = @5;
    p.isFemail = YES;
    Person *p2 = [[Person alloc] init];
    p2.age = @16;
    p2.isFemail = NO;
    Person *p3 = [[Person alloc] init];
    p3.isFemail = YES;
    p3.age = @5;

    [mArr addObject:p];
    [mArr addObject:p2];
    [mArr addObject:p3];
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"age = 5"]; //崩溃 NSPredicate *predicate = [NSPredicate predicateWithFormat:@"age like 5"];
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"isFemail = YES"]; //崩溃 NSPredicate *predicate = [NSPredicate predicateWithFormat:@"isFemail like YES"];

    NSArray *array = [mArr filteredArrayUsingPredicate:predicate];
    NSLog(@"%@",array); 

二、求两个数组的交集

NSArray *array1 = [NSArray arrayWithObjects:@1,@2,@3,@4,@5,@6,nil];
    NSArray *array2 = [NSArray arrayWithObjects:@4,@5,nil];
    //SELF 指下面的array2
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF in %@",array1];
    NSArray *resultArr = [array2 filteredArrayUsingPredicate:predicate];
    NSLog(@"%@",resultArr);

三、过滤数值及字符串 >,<,==,>=,<=,!=

//过滤数值
NSArray *array = @[@1,@2,@3,@4];
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF >= 2"];
    array = [array filteredArrayUsingPredicate:predicate];
    NSLog(@"%@",array);
//过滤字符串
NSArray *array = @[@"1",@"2",@"3",@"4"];
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF >= '2'"];
    array = [array filteredArrayUsingPredicate:predicate];
    NSLog(@"%@",array);

三、范围运算 IN、BETWEEN

NSArray *array = @[@1,@2,@3,@4];
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF BETWEEN {1,5}"]; array = [array filteredArrayUsingPredicate:predicate]; NSLog(@"%@",array);
NSArray *array = @[@"1",@"2",@"3",@"4"];
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF BETWEEN {'1','5'}"];
    array = [array filteredArrayUsingPredicate:predicate];
    NSLog(@"%@",array);
NSArray *array = @[@"1",@"2",@"3",@"4"];
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF IN {'1','5','4','8'}"];
    array = [array filteredArrayUsingPredicate:predicate];
    NSLog(@"%@",array);

四、BEGINSWITH、ENDSWITH、CONTAINS

NSArray *array = @[@"1",@"21",@"31",@"4"];
//包含即可
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self contains '1'"];
    array = [array filteredArrayUsingPredicate:predicate];
    NSLog(@"%@",array);
NSArray *array = @[@"1",@"21",@"31",@"4"];
//以1开头
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self beginswith '1'"];
    array = [array filteredArrayUsingPredicate:predicate];
    NSLog(@"%@",array);
NSArray *array = @[@"1",@"21",@"31",@"4"];
//以1结尾
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self endswith '1'"];
    array = [array filteredArrayUsingPredicate:predicate];
    NSLog(@"%@",array);

五、通配符

 NSArray *array = @[@"1",@"21",@"31",@"4"];
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self like '??1'"];
    array = [array filteredArrayUsingPredicate:predicate];
    NSLog(@"%@",array);
NSArray *array = @[@"1",@"21",@"31",@"4"];
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self like '1*'"];
    array = [array filteredArrayUsingPredicate:predicate];
    NSLog(@"%@",array);

你可能感兴趣的:(ios开发)