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 // }