NSPredicate

转自 daiyelang 专栏


NSPredicate 用于指定过滤条件,主要用于从集合中分拣出符合条件的对象,也可以用于字符串的正则匹配。
NSPredicate常用方法介绍
[objc]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. 1.创建NSPredicate(相当于创建一个过滤条件)  
  2. NSPredicate *predicate = [NSPredicate predicateWithFormat:@"过滤条件"];  
  3. 2.判断指定的对象是否满足NSPredicate创建的过滤条件  
  4. [predicate evaluateWithObject:person];  
  5. 3.过滤出符合条件的对象(返回所有符合条件的对象)  
  6. NSArray *persons = [array filteredArrayUsingPredicate:predicate];  

实例:(以下为伪代码,只为讲解问题)
[objc]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. 1.先创建一个person对象  
  2. @interface Person: NSObject{  
  3. NSString *name;  
  4. int age;  
  5. }  
  6.   
  7. 2.创建一个数组,在数组种加入多个person对象  
  8. NSArray *array=[NSArray arrayWithObjects:person1,person2,person3,person4,...,nil];  
  9.   
  10. 3.使用NSPredicate来过滤array种的person  
  11. a.找出array种age小于20的person  
  12. NSPredicate *predicate = [NSPredicate predicateWithFormat:@"age < 20"];  
  13. for(Person *person in array){  
  14.     if([predicate evaluateWithObject:person]){ //判断指定的对象是否满足  
  15.         //........................  
  16.     }  
  17. }  
  18. NSArray *persons = [array filteredArrayUsingPredicate:predicate];//获取所有age小于20的person  


使用方法主要就这几步,以下讲一些常用的NSpredicate的条件
1.逻辑运算符号 > , < , = , >= , <= 都能使用在这里

运算符还可以跟逻辑运算符一起使用,&&  ,  || ,AND, OR 谓词不区分大小写
[objc]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. NSPredicate *predicate = [NSPredicate predicateWithFormat:@"age > 20"];  
  2. NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name > 'abc' && age > 10"];  
  3. NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name > 'abc' OR age > 10"];  
[objc]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. <span style="font-family: Arial, Helvetica, sans-serif;"></span><p class="p1">  
  2. </p>  

2.IN

[objc]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name IN {'abc' , 'def' , '123'}"];  

3.以xx开头 --beginswith

[objc]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name BEGINSWITH 'N'"];//name以N打头的person  
[objc]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. </pre>4.以xx结尾--endswith</div><div></div><div><pre code_snippet_id="163702" snippet_file_name="blog_20140120_8_9862346" name="code" class="objc">NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name ENDSWITH 'N'"];//name以N结尾的person  

5.包含 -- contains

[objc]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name CONTAINS 'N'"]; <span style="font-family: Arial, Helvetica, sans-serif;">//name种包含'N的person</span>  

6.模糊查询--like

[objc]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name LIKE '*N*'"];//<span style="color: rgb(51, 51, 51); font-family: Arial; font-size: 14.44444465637207px; line-height: 26px;">*表示零个或多个字符</span>  

7.以上说的都是对象种的属性匹配,如果数组种都是字符串如何匹配--self
[objc]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. NSArray *array=[NSArray arrayWithObjects@"abc"@"def"@"ghi",@"jkl", nil nil];  
  2. NSPredicate *pre = [NSPredicate predicateWithFormat:@"SELF=='abc'"];  
  3. NSArray *array2 = [array filteredArrayUsingPredicate:pre];  

 8.正则表达式
[objc]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. (8.) 正则表达式:  
  2. NSPredicate 使用MATCHES 匹配正则表达式,正则表达式的写法采用international components  
  3. for Unicode (ICU)的正则语法。  
  4. 例:  
  5. NSString *regex = @"^A.+e$";//以A 开头,以e 结尾的字符。  
  6. NSPredicate *pre= [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];  
  7. if([pre evaluateWithObject@"Apple"]){  
  8. printf("YES\n");  
  9. }else{  
  10. printf("NO\n");  
  11. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值