关于这个我也是昨天刚刚接触,所以今天想记录下它的用法,不过我目前只会最简单的,不过还是想记录下,Predicate 就是谓词逻辑。和数据库的SQL语句具有相似性,都是从数据堆中根据条件进行筛选。
NSPredicate中主要的几种运算方式 1.比较运算符 > 、< 、== 、 >= 、<= 、 != 例:@"number >= 99" 2.逻辑运算符:AND、OR、NOT 这几个运算符计算并、或、非的结果。 3.范围运算符:IN 、BETWEEN 例:@"number BETWEEN {1,5}" @"address IN {'shanghai','nanjing'}" 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
虽然正则表达式的执行效率是最低的,但其功能是最强大的,也是我们最常用的。
如果说如果a和b是传递过来的参数,你可以写成如下的形式: @"width>%d and height<%f",a,b
beginswitch、contains、endswith: @"name contains[cd] 'a'" //包含某个字符串 @"name beginswitch[c] 'b'" //以某个字符串开头 @"name endswith[d] 'a'" //以某个字符串结束 NSArray *arr = @[@"回家1",@"哈回家2",@"回家3"]; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self contains[cd] '家'"]; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self beginswith[c] '哈'"]; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self endswith[d] '1'"]; // 字符串也要单引号 NSArray *result = [dataArr filteredArrayUsingPredicate:predicate]; // 打印输出结果 NSLog(@"%@",result); NSPredicate *searchPredicate = [NSPredicate predicateWithFormat:@"self contains[cd] %@", searchText];//包含某个字符串 return [weakSelf.dataArr filteredArrayUsingPredicate:searchPredicate];LIKE:检查某个字符串是否匹配指定的字符串模板。其之后可以跟?代表一个字符和*代表任意多个字符两个通配符。比如"name LIKE '*ac*'",这表示name的值中包含ac则返回YES;"name LIKE '?ac*'",表示name的第2、3个字符为ac时返回YES。
NSArray *arr = @[@"abcd",@"abbcd",@"bbc",@"qwe",@"list"]; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self like[cd] '?bbc*'"]; // 注意这个语法里面字符串要用单引号 NSArray *result = [arr filteredArrayUsingPredicate:predicate]; // 打印输出结果输出abbcd,注意如果把?bbc*改成了bbc*输出的就是bbc字符串之间的比较都是区分大小写和重音符号的。如:lifé和life是不一样的,Life和life也是不一样的。如果希望字符串比较运算不区分大小写和重音符号,可以在这些运算符后使用[c],[d]选项。其中[c]是不区分大小写,[d]是不区分重音符号,都写在写在字符串比较运算符之后,比如:state LIKE[cd] 'life',那么不论state是life、life还是lifé上面的表达式都会返回YES。
