NSPredicate 用于指定过滤条件,主要用于从集合中分拣出符合条件的对象,也可以用于字符串的正则匹配。

NSPredicate常用方法介绍
  1. 1.创建NSPredicate(相当于创建一个过滤条件)
  2. NSPredicate *predicate = [NSPredicate predicateWithFormat:@"过滤条件"];
  3. 2.判断指定的对象是否满足NSPredicate创建的过滤条件
  4. [predicate evaluateWithObject:person];
  5. 3.过滤出符合条件的对象(返回所有符合条件的对象)
  6. NSArray *persons = [array filteredArrayUsingPredicate:predicate];
 
实例:(以下为伪代码,只为讲解问题)
  1. 1.先创建一个person对象
  2. @interface Person: NSObject{
  3. NSString *name;
  4. int age;
  5. }
  6. 2.创建一个数组,在数组种加入多个person对象
  7. NSArray *array=[NSArray arrayWithObjects:person1,person2,person3,person4,...,nil];
  8. 3.使用NSPredicate来过滤array内的person
  9. a.找出array种age小于20的person
  10. NSPredicate *predicate = [NSPredicate predicateWithFormat:@"age < 20"];
  11. for(Person *person in array){
  12. if([predicate evaluateWithObject:person]){ //判断指定的对象是否满足
  13. //........................
  14. }
  15. }
  16. NSArray *persons = [array filteredArrayUsingPredicate:predicate];//获取所有age小于20的person
 
使用方法主要就这几步,以下讲一些常用的NSpredicate的条件
1.逻辑运算符号 > , < , = , >= , <= 都能使用在这里
 
运算符还可以跟逻辑运算符一起使用,&&  ,  || ,AND, OR 谓词不区分大小写
  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"];
  1. <span style="font-family: Arial, Helvetica, sans-serif;"></span><p class="p1">
  2. </p>

2.IN

  1. NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name IN {'abc' , 'def' , '123'}"];
3.以xx开头 --beginswith
 
  1. NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name BEGINSWITH 'N'"];//name以N打头的person
  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
 
  1. NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name CONTAINS 'N'"]; <span style="font-family: Arial, Helvetica, sans-serif;">//name种包含'N的person</span>
6.模糊查询--like
 
  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
  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.正则表达式

  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. }
 备注:以上为本人浅见,如有不对之处,请各位大大们指出纠正,谢谢!!

NSPredicate 谓词总结 数组过滤 模糊匹配的更多相关文章

  1. php 数组模糊匹配

    php 数组模糊匹配: $list = array(); // 匹配后的结果 $arr = array("abcd","abef","efgh&quo ...

  2. EasyUI combobox下拉列表实现搜索过滤(模糊匹配)

    项目中的某个下拉列表长达200多个项,这么巨大的数量一个一个找眼镜都得看花,于是就得整了个搜索功能.看网上别人帖子有只能前缀匹配的方案,但只能前缀匹配的话用起来也不是很方便.于是就记录一下模糊匹配的方 ...

  3. IOS开发之NSPredicate谓词的用法

    编程的人员不管是上过大学还是从培训机构出来的或做后台的.前端的都应该SQL语句有所了解,我们知道,在SQL语句当中 where 条件表达式可以对二维关系表的数据做条件筛选.微软的C# .net中也实现 ...

  4. NSPredicate谓词

    NSPredicate——谓词(is) 作用:判断条件表达式的求值返回真或假的过程 使用步骤: . 定义NSPredicate对象并指定条件 . 调用谓词的evaluateWithObject方法判断 ...

  5. iOS NSArray数组过滤

    需求:在一个数组里面,将在这个数组中的并且在另一个数组里面的元素过滤掉. 即:在一个数组dataArray里面,将在dataArray数组中的并且在filteredArray数组里面的元素过滤掉. / ...

  6. 1035-Spell checker(模糊匹配)

    一,题意: 给出一组字典的单词,以'#'结束,之后给出一组要执行模糊匹配的单词序列,以'#'结束 1,若某个单词能在字典中找到,则输出corret 2,若某个单词能通过 变换 或 删除 或 添加一个字 ...

  7. es 基于match_phrase的模糊匹配原理及使用

    [版权声明]:本文章由danvid发布于http://danvid.cnblogs.com/,如需转载或部分使用请注明出处 在业务中经常会遇到类似数据库的"like"的模糊匹配需求 ...

  8. JPQL模糊匹配单个字符

    JPQL模糊匹配,不是%,而是单个字符,该怎么办?比如我要查出数据库中满足后三位是数字的字符串 对于mysql来说,使用通配符 %和_可以轻松解决,但是对于JPQL来说模糊查询就伤脑筋了... 有一个 ...

  9. DevExpress控件cxGrid实现多列模糊匹配输入的完美解决方案

    本方案不需要修改控件源码,是完美解决cxgrid或TcxDBExtLookupComboBox支持多列模糊匹配快速输入的最佳方案!! 转自https://blog.csdn.net/qq5643020 ...

随机推荐

  1. nginx 设置ip地址访问,但是设置域名访问不了

    一.导语 在Nginx的设置过程中,ip地址能正常访问的,但是把ip地址转换成域名,就访问不了了,这个是怎么回事呢?今天来探讨一下 二.设置ip地址做负载均衡 2.1.server端 server { ...

  2. 转:增强学习(二)----- 马尔可夫决策过程MDP

    1. 马尔可夫模型的几类子模型 大家应该还记得马尔科夫链(Markov Chain),了解机器学习的也都知道隐马尔可夫模型(Hidden Markov Model,HMM).它们具有的一个共同性质就是 ...

  3. 在生成的Debug中test.exe的同级目录下创建一个文件,如TestLog.log

    在上次编写一个日志类库时,想在.exe的同级目录下创建.log文件,对于这个路径的获得很简单,调用GetModuleFileName()函数即可.但是要去掉.exe而换成.log时,由于对字符串处理不 ...

  4. windows启动redis服务

    参考:https://www.cnblogs.com/M-LittleBird/p/5902850.html 使用python的pip install redis以后还需要下载安装redis安装文件才 ...

  5. python3 生成器表达式

    生成器表达式 [i for i in range(100)] #列表解析 与列表解析的不同是,列表解析用中括号,生成器表达式用小括号 g = (i for i in range(1000)) #生成器 ...

  6. K-D树问题 HDU 4347

    K-D树可以看看这个博客写的真心不错!这里存个版 http://blog.csdn.net/zhjchengfeng5/article/details/7855241 HDU 4349 #includ ...

  7. Android源码的BUG

    在Android系统移植过程中,遇到很多源码上的BUG.但是我们看到市面上都是没有这些问题的.难道这些BUG在每个开发商都要经历一次解BUG的过程吗?Android释放的源码是否是最新的?暂时没有想法 ...

  8. 出现“error c4430缺少类型说明符-假定为int。注意C++不支持默认int

    出现这种错误的原因,是因为函数没有写返回值.是在VC6.0的工程转为高版本(VS2010)的时候经常出现的; #include <stdio.h> main() { printf(&quo ...

  9. 【POI2017||bzoj4726】Sabota?

    上学期putsnan过了一次,这学期认真写了一遍…… #include<bits/stdc++.h> #define N 500010 using namespace std; ]; ,n ...

  10. 使用lombok省略get、set代码

    首先下载lombok的jar包,如果是maven项目,直接加依赖 <dependency> <groupId>org.projectlombok</groupId> ...