NSPredicate使用

NSPredicate是一个Foundation类,它指定数据被获取或者过滤的方式。

NSPredicate使用时主要分两步走:第一步,定义谓词语句;第二步,根据要求,选择不同的方法执行谓词语句。

一.定义谓词语句

首先,我们来定义一个谓词语句,在定义谓词语句时,先介绍谓词的语法。

1.比较运算符(用于数值和字符串)

 >:大于

 <:小于

 >=:大于等于

 <=:小于等于

 =,==:等于

 !=,<>:不等于

 between:左边的表达式等于右边的表达式的值或者介于它们之间。右边是一个有两个指定上限和下限的数值的数列(指定顺序的数列)。比如,1 BETWEEN { 0 , 33 },或者$INPUT BETWEEN { $LOWER, $UPPER }。

2.逻辑运算符

and/&&:与

 or/||:或

 not/!:非

3.关系运算符

  ANY,SOME:指定下列表达式中的任意元素。比如,ANY children.age < 18。

  ALL:指定下列表达式中的所有元素。比如,ALL children.age < 18。

  NONE:指定下列表达式中没有的元素。比如,NONE children.age < 18。它在逻辑上等于NOT (ANY ...)。

 IN:等于SQL的IN操作,左边的表达必须出现在右边指定的集合中。比如,name IN { 'Ben', 'Melissa', 'Nick' }。

4.字符串本身:SELF

例:@"SELF == 'APPLE'"

5.字符串相关:BEGINSWITH、ENDSWITH、CONTAINS

例:@"name CONTAIN[cd] 'ang'"  //包含某个字符串

@"name BEGINSWITH[c] 'sh'"    //以某个字符串开头

@"name ENDSWITH[d] 'ang'"      //以某个字符串结束

注:[c]不区分大小写 , [d]不区分发音符号即没有重音符号 , [cd]既不区分大小写,也不区分发音符号。

6.通配符:LIKE

例:@"name LIKE[cd] '*er*'"    //*代表通配符,Like也接受[cd].

@"name LIKE[cd] '???er*'"

7.正则表达式:MATCHES

例:NSString *regex = @"^A.+e$";  //以A开头,e结尾

@"name MATCHES %@",regex

二.执行谓词语句

方法1:- (void)filterUsingPredicate:(NSPredicate *)predicate;针对可变数组进行过滤,过滤掉可变数组中不符合条件的。

例:

//定义谓词语句

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"age > 3"];

//过滤可变数组

[_mutableArray filterUsingPredicate:predicate];

方法2:- (NSArray *)filteredArrayUsingPredicate:(NSPredicate *)predicate; 针对不可变数组进行过滤,将符合条件的元素组成一个新数组进行返回

例:

//定义谓词语句

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"age > 3"];

// 不可变数组过滤将过滤后符合条件的元素组成一个新数组返回

NSArray *array = [[NSArray alloc]initWithArray:_mutableArray];

array = [array filteredArrayUsingPredicate:predicate];


方法3:- (BOOL)evaluateWithObject:(id)object; 向谓词对象发送该方法,参数是过滤的对象。常见于和正则表达式配合使用。

例:

NSString *number = @"^[0-9]$";

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",number];

//符合过滤条件就返回yes

BOOL  isTrue = [predicate  evaluateWithObject:textString];

三.其他使用场景

NSArray *array1 = [NSArray arrayWithObjects:@1,@2,@3,@5,@5,@6,@7, nil];

NSArray *array2 = [NSArray arrayWithObjects:@4,@5, nil];

// 表示筛选array1在array2中的元素! 其中SELF指向filteredArrayUsingPredicate的调用者。

NSPredicate *predicate1 = [NSPredicate predicateWithFormat:@"SELF  in %@",array2];

NSArray *temp1 = [array1 filteredArrayUsingPredicate:predicate1];

结果:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容