NSPredicate是什么
NSPredicate:谓词
字面翻译是这个意思,但是我觉得谓词这个词太难以理解了
NSPredicate的具体用途应该还是过滤,类似于过滤条件之类的,相当于一个主语的谓语,所以说会是谓词这个名字。(我是这么理解的)
NSPredicate的创建
我们看到创建谓词使用类方法predicateWithFormat: (NSString *)格式,格式里的东西真的
和SQL的条件差不多。
另外,参数格式与NSLog的格式化模版差不多,如果1和188.0
是传递过来的参数,你可以写成如下的形式:
@“pid> % d和height<% f”, 1188 .0
NSPredicate中主要的几种运算方式
1。比较运算符在& lt;==,祝辞=& lt;=?=
例:@“祝辞数量=99”
2。逻辑运算符,或者,不是这几个运算符计算并,或,非的结果。
3。之间的,范围运算符:
例:@{1,5}”之间的“数字
@”地址在{“上海”、“南京”}”
4。字符串本身:自我
例:@“自我==还?/p>
5。字符串相关:BEGINSWITH ENDSWITH,包含
例:@”名称包含(cd)”和“”//包含某个字符串
@”名称BEGINSWITH [c] sh”//以某个字符串开头
@”名称ENDSWITH [d]盎”//以某个字符串结束
注:[c]不区分大小写,[d]不区分发音符号即没有重音符号,(cd)既不区分大小写,也不区分发音符号。
6。通配符:
例:@“名字像(cd) *呃*”//*代表通配符,像也接受(cd)。
@”名称(cd)”? ? ?呃*”
7。正则表达式:匹配
例:NSString * regex=@ ^ a + e美元”;//以一个开的头,e结尾
@”名称匹配% @”,regex
如何使用NSPredicate对一个自定义实体进行筛选
NSPredicate我暂时都是用于过滤的,否则我们过滤就需要自己写判断写循环,去判断输出了。
接下来就上代码和例子吧。
建立一个实体类狗
@property (copy ,,,,原子),NSString *,名字,, @property (assign ,,原子),int ,,,,,, age ;
这样我们就有一个类了
我们创建5只狗的实体
Dog *, dog1=(Dog 新闻);dog1.name=@”这是第一只狗”,dog1.age=@“十一”; Dog *, dog2=(Dog 新闻);dog2.name=@”这是第二只狗”;dog2.age=@“22”; Dog *, dog3=(Dog 新闻);dog3.name=@”这是第三只狗”;dog3.age=@“33”; Dog *, dog4=(Dog 新闻);dog4.name=@”这是第四只狗”;dog4.age=@“44”; Dog *, dog5=(Dog 新闻);dog5.name=@”这是第五只狗”;dog5.age=@“55”;
不要吐槽我的狗的年龄→→。
然后我们需要一个数组把他们都装进去
NSArray *, dogArr=@ [dog1、dog2 dog3, dog4, dog5];
酱紫所有的狗都装到一个数组里了
使用NSPredicate的筛选
- <李>
没有使用NSPredicate的筛选应该大家都会写,循环+判断…
李> <李>使用NSPredicate的筛选
李>具体使用的代码
//创建谓词的对象,谓词条件是基于现有的,所以需要说明一点,加入狗里面有个属性是Doginfo指向Doginfo类,在使用的时候,我们的条件就要写成Doginfo.xxx了。 NSPredicate *, predicate =, [NSPredicate predicateWithFormat: @“name=='这是第一只狗”,以及age ==11 "); (Dog *, d 拷贝dogArr) { ,,,如果((predicate evaluateWithObject: d)) ,,,{ ,,,,,,,NSLog (d.name); ,,,} }
以上的代码打印出来的结果就是这是第一只狗
NSPredicate筛选一个对象逻辑还是很清晰的,不过这里比较麻烦的就是还有一个循环,这里我们会发现数组提供了一个方法可以更方便的检索数组对象
直接筛选出一个符合谓词的新数组。
NSPredicate * pre =, (NSPredicate predicateWithFormat: @“, age 的在11”); NSMutableArray * arrayPre=[dogArr filteredArrayUsingPredicate: pre];
arrayPre里面的对象就会是除了dog1之外的所有的狗。(至于为什么看我的条件……)
看到这里发现NSPredicate可以用于自定义的实体的检索,筛选,那如果用于NSString,使用NSInteger bool呢?那我们再看一段代码吧
NSArray *数组=[NSArray arrayWithObjects: @“苹果”,,@“谷歌”,,@“微软”,nil); NSPredicate * pre2 =, (NSPredicate predicateWithFormat: @“自我==还?;
上面这段代码是匹配字符串的时候NSPredicate需要如何声明
使用NSPredicate在两个数组之间进行差异筛选
NSArray *, array =, @ [@“aa”@“bb”); NSArray *, array2 =, @ [@“aa”@“bb”@“cc”@“弟弟”); NSPredicate *, thePredicate =, [NSPredicate predicateWithFormat: @“不是(SELF % @)拷贝”,数组); 时间=NSArray *, arr3 [array2 filteredArrayUsingPredicate thePredicate):; NSLog (@ % @”, arr3);NSPredicate