zoukankan      html  css  js  c++  java
  • 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 //    }
  • 相关阅读:
    远程网络时间同步在分布式测控与实时仿真系统应用
    GPS对时装置(北斗卫星同步时钟)应用市场调研分析
    时间同步服务器(NTP时钟同步服务器)如何正确的选购?
    NTP授时服务器(卫星同步时钟)与物联网十大应用
    App 自动化环境搭建(基于 Appium)
    let var作用域
    vue methods和computed效率比较
    vue computed
    vue computed
    vue v-bind:style
  • 原文地址:https://www.cnblogs.com/DevinSMR/p/5283338.html
Copyright © 2011-2022 走看看