iOS开发 ☞ NSPredicate 谓词过滤

本文详细介绍了如何使用NSPredicate进行数据过滤,包括根据模型条件过滤数组,求解两个数组的交集,操作数值及字符串的比较运算,如>、<、==等,以及范围运算IN和BETWEEN。同时,还探讨了字符串开头、结尾和包含的判断BEGINSWITH、ENDSWITH、CONTAINS,以及通配符的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值