NSPredicate

  

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