NSPredicate

NSPredicate,厉害了我的哥

之前真的没在意,亦不知道还有这个东西,有这个东西我还有遍历?
这个东西真的强

先上点大白馒头

  • iOS Predicate 即谓词逻辑。和数据库的SQL语句具有相似性,都是从数据堆中根据条件进行筛选。

1.使用场景:

  1. (1)NSPredicate给我留下最深印象的是两个数组求交集的一个需求,如果按照一般写法,需要2个遍历,但NSArray提供了一个filterUsingPredicate的方法,用了NSPredicate,就可以不用遍历!

  2. (2)在存储自定义对象的数组中,可以根据条件查询数组中满足条件的对象。

2.重要语法

//1.比较运算符 >,<,==,>=,<=,!=
//例:@"number > 100"
//   @"string == 'nihao'"
-(void)testPredicateComparation{

    NSArray * array1 = @[@1,@2,@3,@4,@5];
    NSPredicate * bijiao = [NSPredicate predicateWithFormat:@"SELF>4"];
    NSArray * resultArray = [array1 filteredArrayUsingPredicate:bijiao];
    NSLog(@"%@",resultArray);
}

//2.范围运算符:IN,BETWEEN
//例:@"number BETWEEN {1,5}"
//   @"address IN {'shanghai','beijing'}"
-(void)testPredicateRange{

    NSArray * array1 = @[@1,@2,@3,@4,@5];
    //此处注意包含1和5
    NSPredicate * bijiao = [NSPredicate predicateWithFormat:@"SELF BETWEEN {1,5}"];
    NSArray * resultArray = [array1 filteredArrayUsingPredicate:bijiao];
    NSLog(@"%@",resultArray);
}


//3.字符串相关   BEGINSWITH、ENDSWITH、CONTAINS
//例:@"name CONTAIN[cd] 'ang'"  //包含某个字符串
//  @"name BEGINSWITH[c] 'sh'"    //以某个字符串开头
//  @"name ENDSWITH[d] 'ang'"      //以某个字符串结束
//
//注:[c]不区分大小写   [d]不区分发音符号即没有重音符号   [cd]既不区分大小写,也不区分发音符号。
-(void)testPredicatePelateToNSString{

    NSArray * array1 = @[@"beijing",@"shanghai",@"shandong",@"guangzhou",@"shenzhen"];
    NSPredicate * bijiao = [NSPredicate predicateWithFormat:@"SELF CONTAINS[cd] 'an'"];
    NSArray * resultArray = [array1 filteredArrayUsingPredicate:bijiao];
    NSLog(@"%@",resultArray);
}

//4.通配符:LIKE

//例:   @"name LIKE[cd] '*er*'"    //*代表通配符,Like也接受[cd].
//      @"name LIKE[cd] '???er*'"
-(void)testPredicateWildcard{

    NSArray * array1 = @[@"beijing",@"shanghai",@"shandong",@"guangzhou",@"shenzhen"];
    NSPredicate * bijiao = [NSPredicate predicateWithFormat:@"SELF like[cd] '*an*'"];
    NSArray * resultArray = [array1 filteredArrayUsingPredicate:bijiao];
    NSLog(@"%@",resultArray);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值