NSPredicate类是用来定义逻辑条件约束的,通过定义逻辑条件进行查询与过滤。
基本语法
比较运算符
比较运算符 >
<
==
>=
<=
!=
// 比较运算符 > , < , == , >= , <= , !=
// 运算符还可以跟逻辑运算符一起使用,&& , || ,AND, OR 谓词不区分大小写
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"age == %ld" ,[text integerValue]];
范围运算符(不区分大小写)
范围运算符:IN
BETWEEN
//范围运算符:IN、BETWEEN
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"age in{ 40, 50}" ,[text integerValue]]; //age == 40 age == 50
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"age BETWEEN{ 40, 50}" ,[text integerValue]]; // 40 <= age <= 50
字符串本身符
一般通过谓词(NSPredicate)验证正则表达式时使用
字符串本身:SELF
//字符串本身:SELF
NSArray *array=[NSArray arrayWithObjects: @"abc", @"def", @"ghi",@"jkl", nil nil];
NSPredicate *pre = [NSPredicate predicateWithFormat:@"SELF=='abc'"];
NSArray *array2 = [array filteredArrayUsingPredicate:pre];
过滤字符
过滤字符相关:BEGINSWITH
以···开始、ENDSWITH
以···结尾、CONTAINS
包含
//字符串相关:BEGINSWITH 以···开始、ENDSWITH 以···结尾、CONTAINS 包含
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name CONTAINS[cd] %@" ,text];
注:[c]
不区分大小写 [d]
不区分发音符号即没有重音符号 [cd]
既不区分大小写,也不区分发音符号。
模糊过滤字符
通配符:LIKE
*
代表通配符Like还接受[cd]
?
只匹配一个字符并且还可以接受[cd]
.
//通配符:LIKE *代表通配符Like还接受[cd] ?只匹配一个字符并且还可以接受[cd].
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self LIKE '?z'"];
self.predicateArr = [[NSArray arrayWithObjects:@"az", @"zzz", @"zaa", @"arw", nil] filteredArrayUsingPredicate:predicate];
正则表达式
正则表达式:MATCHES
正则表达式:MATCHES
NSString *phoneRegex = @"^((13[0-9])|(14[0-9])|(15[0-9])|(17[0-9])|(18[0-9]))\\d{8}$";
NSPredicate *phoneTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",phoneRegex];
//判断指定的对象是否满足NSPredicate创建的过滤条件
[phoneTest evaluateWithObject:@"手机字符串"];
代码示例
//创建NSPredicate(相当于创建一个过滤条件)
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name CONTAINS[cd] %@" ,text];
//过滤出符合条件的对象(返回所有符合条件的对象)
self.predicateArr = [self.mutArr filteredArrayUsingPredicate:predicate];
网友评论