NSPredicate详解一

NSPredicate是Foundation框架提供的用来指定过滤条件的类。可以通过一种类似SQL where 从句的谓语查询语言创建谓语对象。主要运用在集合中筛选子项和数据库查询,也可以用于字符串的正则匹配。

常用的谓语对象初始化方法:

NSPredicate * predicate = [NSPredicate predicateWithFormat:@"name=%@",@"hark"];

谓语需要对集合中的对象值进行比较,在此例中集合的每一个对象都必须有name这个属性

NSArray * listObjects = @[@{@"name":@"james",@"age":@(32)},@{@"name":@"peter", @"age":@(29)}, @{@"name":@"hark", @"age":@(28)}];

一个简单的例子:

NSPredicate * predicate = [NSPredicate predicateWithFormat:@"name=%@",@"hark"];
NSArray * result = [listObjects filteredArrayUsingPredicate:predicate];
NSLog(@"%@", result);		//output:({name=hark})

谓语支持的比较操作

基本比较操作

==(=),>=(=>),<=(=<),>,<,!=(<>),BETWEEN

前面的都简单,没什么好说的,BETWEEN的使用

NSPredicate * predicate = [NSPredicate predicateWithFormat:@"age BETWEEN {20, 30}"];
NSArray * result = [listObjects filteredArrayUsingPredicate:predicate]
NSLog(@"%@", result); 		//output:({name=peter;age=29},{name=hark;age=28})

字符串比较操作

  • BEGINSWITH (左值以右值开头)

NSPredicate * beginswithPredicate = [NSPredicate predicateWithFormat:@"name BEGINSWITH 'h'"];
result =[listObjects filteredArrayUsingPredicate:beginswithPredicate];
NSLog(@"%@", result);		//output:({age=28;name=hark})

  • CONTAINS (左值包含右值)

NSPredicate * containsPredicate = [NSPredicate predicateWithFormat:@"name CONTAINS 'et'"];
result =[listObjects filteredArrayUsingPredicate:beginswithPredicate];
NSLog(@"%@", result);		//output:({age=29;name=peter})

  • ENDSWITH (左值以右值结尾)
NSPredicate * endswithPredicate = [NSPredicate predicateWithFormat:@"name ENDSWITH 's'"];
result = [listObjects filteredArrayUsingPredicate:endswithPredicate];
NSLog(@"%@", result);		//output:({age=32;name=james})

  • LIKE (左值等于右值,可使用?和*通配符,?匹配单个字符,*匹配0~n个字符)
NSPredicate * likePredicate = [NSPredicate predicateWithFormat:@"name LIKE *et*"];
result = [listObjects filteredArrayUsingPredicate:likePredicate];
NSLog(@"%@", result);		//output:({age=29;name=peter})

  • MATCHES (左值使用右侧正则进行匹配)
NSPredicate * matchesPredicate = [NSPredicate predicateWithFormat:@"name MATCHES '^[ph].*'"];
result = [listObjects filteredArrayUsingPredicate:likePredicate];
NSLog(@"%@", result);		//output:({age=29;name=peter},{age=28;name=hark})

字符串比较选项
[c] 大小写不敏感

[d] 忽略发音符

[n] 表明操作对象已经预处理(大小写已转换,替换发音符等等...),设置该项时会忽略已设置的[c][d]项

[l] 表明需要考虑本地字符集


NSPredicate *optionPredicate = [NSPredicate predicateWithFormat:@"name = [d]'hàrk'"];
result = [listObjects filteredArrayUsingPredicate:optionPredicate];
NSLog(@"%@", result);       //output:({age=28;name=hark})

集合操作

  • ANY,SOME,ALL,NONE (对集合进行匹配,返回的结果也是集合)
NSArray * wrapListObjects = @[listObjects];
NSPredicate * anyPredicate = [NSPredicate predicateWithFormat:@"ANY SELF.age > 30"];
result = [wrapListObjects filteredArrayUsingPredicate:anyPredicate];
NSLog(@"%@", result);	//output:(({age=32;name=james},{age=29;name=peter},{age=32;name=}))
NSPredicate * allPredicate = [NSPredicate predicateWithFormat:@"ALL SELF.age > 30"];
result = [wrapListObjects filteredArrayUsingPredicate:allPredicate];
NSLog(@"%@", result);	//output:(())

  • IN
NSPredicate * inPredicate = [NSPredicate predicateWithFormat:@"name in {'hark', 'paul', 'jimmy'}"];
result = [listObjects filteredArrayUsingPredicate:inPredicate];
NSLog(@"%@", result);	//output:({age=28,name=hark})

逻辑运算操作

AND(&&),OR(||),NOT(!)

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name BEGINSWITH %@ AND age BETWEEN {%d, %d}", @"h", 20, 30];


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值