iOS 之 谓词(NSPredicate)查询与过滤 全解

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];

代码下载

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

推荐阅读更多精彩内容

  • NSPredicate是什么 NSPredicate:谓词 字面翻译是这个意思,但是我觉得谓词这个词太难以理解了 ...
    Aiana阅读 1,567评论 0 1
  • 今日无事 八点回来睡到凌晨一点多醒来 做阳春面和冰糖雪梨 外面没有一点光 今天也没有月亮 看到新世相有一篇文章 在...
    catfy阅读 196评论 0 0
  • 从门口走出来那一刹那,我的内心轻松了一下。之前内心一直回荡着一句话:一辈子真长,一辈子太长了。平时都是感慨时间过的...
    幻灭能否重生阅读 532评论 0 0
  • 猜水车阅读 132评论 0 0