1 // 谓词 NSpredicate 2 3 // OC中的谓词操作是针对于数组类型的,他就好比数据库中的查询操作,数据源就是数组,这样的好处是我们不需要编写很多代码就可以去操作数组,同时也起到过滤的作用,我们可以编写简单的谓词语句,就可以从数组中过滤出我们想要的数据。非常方便。在Java中是没有这种技术的,但是有开源的框架已经实现了此功能。 4 5 // Format: 6 // (1)比较运算符>,<,==,>=,<=,!= 7 // 可用于数值及字符串 8 // 例:@"number > 100" 9 // 10 // 11 // (2)范围运算符:IN、BETWEEN 12 // 例:@"number BETWEEN {1,5}" 13 // @"address IN {'shanghai','beijing'}" 14 // 15 // 16 // (3)字符串本身:SELF 17 // 例:@“SELF == ‘APPLE’" 18 // 19 // 20 // (4)字符串相关:BEGINSWITH、ENDSWITH、CONTAINS 21 // 例:@"name CONTAIN[cd] 'ang'" //包含某个字符串 22 // @"name BEGINSWITH[c] 'sh'" //以某个字符串开头 23 // @"name ENDSWITH[d] 'ang'" //以某个字符串结束 24 // 注:[c]不区分大小写 [d]不区分发音符号即没有重音符号 [cd]既不区分大小写,也不区分发音符号。 25 // 26 // 27 // (5)通配符:LIKE ,*代表任意个任意字符,?代表一个任意字符 28 // 例:@"name LIKE[cd] '*er*'" //*代表通配符,Like也接受[cd]. 29 // @"name LIKE[cd] '???er*'" 30 // 31 // 32 // (6)正则表达式:MATCHES 33 // 例:NSString *regex = @"^A.+e$"; //以A开头,e结尾 34 // @"name MATCHES %@",regex 35 36 37 NSMutableArray *arr = [NSMutableArray new]; 38 39 Person *per1 = [Person personWithName:@"王尼玛" Gender:@"男" Age:10]; 40 Person *per2 = [Person personWithName:@"李蛋蛋" Gender:@"女" Age:15]; 41 Person *per3 = [Person personWithName:@"赵出溜" Gender:@"男" Age:18]; 42 Person *per4 = [Person personWithName:@"郭艾伦" Gender:@"男" Age:19]; 43 Person *per5 = [Person personWithName:@"刘天一" Gender:@"女" Age:20]; 44 Person *per6 = [Person personWithName:@"张悟净" Gender:@"男" Age:30]; 45 Person *per7 = [Person personWithName:@"魏一撇" Gender:@"男" Age:21]; 46 47 arr = @[per1,per2,per3,per4,per5,per6,per7].mutableCopy; 48 49 50 51 52 /* 53 // "大小"是在"谓词格式字符串语法"中的保留的关键字和关键字是不区分大小写。 54 55 // 为关键路径,为了解决这一问题,作为 var arg 代替使用"%k"格式参数: 56 57 // NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K > 0", @"size"]; 58 */ 59 //定义谓词对象 (%K = %@) 60 NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K = %ld",@"age",20]; 61 //使用谓词条件过滤数组中的元素,过滤之后返回查询的结果 62 NSArray *result1 = [arr filteredArrayUsingPredicate:predicate]; 63 for (Person *per in result1) { 64 NSLog(@"name = %@,gender = %@,age = %ld",per.name,per.gender,per.age); 65 } 66 67 //and (&&) 68 // NSPredicate *predicate2 = [NSPredicate predicateWithFormat:@"age > 19 and age < 21"]; 69 // NSArray *result2 = [arr filteredArrayUsingPredicate:predicate2]; 70 // for (Person *per in result2) { 71 // NSLog(@"name = %@,gender = %@,age = %ld",per.name,per.gender,per.age); 72 // } 73 74 //in(包含) 75 // predicate = [NSPredicate predicateWithFormat:@"gender IN {'男'} && age between {20,30}"]; 76 // NSArray *result3 = [arr filteredArrayUsingPredicate:predicate]; 77 // for (Person *per in result3) 78 // { 79 // NSLog(@"name = %@,gender = %@,age = %ld",per.name,per.gender,per.age); 80 // 81 // } 82 //name以什么开头的 83 // predicate = [NSPredicate predicateWithFormat:@"self.name BEGINSWITH '李'"]; 84 // NSArray *result3 = [arr filteredArrayUsingPredicate:predicate]; 85 // for (Person *per in result3) 86 // { 87 // NSLog(@"name = %@,gender = %@,age = %ld",per.name,per.gender,per.age); 88 // 89 // } 90 91 //name以什么结尾的 92 93 // predicate = [NSPredicate predicateWithFormat:@"name ENDSWITH '撇'"]; 94 // NSArray *result3 = [arr filteredArrayUsingPredicate:predicate]; 95 // for (Person *per in result3) 96 // { 97 // NSLog(@"name = %@,gender = %@,age = %ld",per.name,per.gender,per.age); 98 // 99 // } 100 //是否包含什么 101 // predicate = [NSPredicate predicateWithFormat:@"name CONTAINS '尼玛'"]; 102 // NSArray *result = [arr filteredArrayUsingPredicate:predicate]; 103 // for (Person *per in result) 104 // { 105 // NSLog(@"name = %@,gender = %@,age = %ld",per.name,per.gender,per.age); 106 // 107 // } 108 //名字是否包含字符 109 // predicate = [NSPredicate predicateWithFormat:@"name like '*艾*'"]; 110 // NSArray *result = [arr filteredArrayUsingPredicate:predicate]; 111 // for (Person *per in result) 112 // { 113 // NSLog(@"name = %@,gender = %@,age = %ld",per.name,per.gender,per.age); 114 // 115 // } 116 117 //?代表一个字符,下面的查询条件是:name中第二个字符是s的 118 // predicate = [NSPredicate predicateWithFormat:@"name like '*?出*'"]; 119 // NSArray *result = [arr filteredArrayUsingPredicate:predicate]; 120 // for (Person *per in result) 121 // { 122 // NSLog(@"name = %@,gender = %@,age = %ld",per.name,per.gender,per.age); 123 // 124 // }