Predicate

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

 

posted @ 2016-03-16 14:10  恒远也  阅读(334)  评论(0编辑  收藏  举报