• 谓词


    谓词是基于路径的,基本的功能是用来查询和过滤

    谓词通经常使用到的正則表達式

    1.字符类型

    .  随意字符
    [] 能够在字符串中限定字符的范围
    d [0-9] 数字
    D [^0-9] 非数字
    s 全部不可见字符(空格、tab)
    S 全部可见字符
    w [0-9a-zA-Z_] 单词(数字、字母、下划线)
    W [^0-9a-zA-Z] 非单词

    2.数量限定

    ?     前面的一个字符或者()至多出现1次 (0次或1次)
    +     前面的一个字符或者()至少出现1次 (1次或者多次)
    *     前面的一个字符或者()能够出现随意次数 (0次、1次或者多次)
    {n}   前面的一个字符或者()出现n次
    {n,}  前面的一个字符或者()至少出现n次
    {n,m} 前面的一个字符或者()出现n到m次

    3.其它字符

    ^     以什么開始 ^A表示以A開始
    $     以什么结束 B$表示以B结束
    |     表示选择 gray|grey表示gray或者grey
    ()    能够改变优先级。作为一个总体
    //谓词NSPredicate用来查询和过滤 相似于SQL中的where
    
            //1创建 number类型的数组
            NSArray *numberArr = @[@21,@324,@234,@433,@5454];
    
            //1.1创建谓词对象<= 345的数过滤出来(> >= <= != <)
            NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF <= 345"];
            //1.2通过谓词对象。

    来过滤数组形成新的数组 NSArray *numberRes = [numberArr filteredArrayUsingPredicate:predicate]; NSLog(@"%@",numberRes); //2 创建一个person数组 NSArray *personArray = @[ [QYPerson personWithName:@"zhangsan" identify:@"xxx" andAge:18], [QYPerson personWithName:@"lisi" identify:@"yyy" andAge:17], [QYPerson personWithName:@"lisi" identify:@"yyx" andAge:19], [QYPerson personWithName:@"wangwu" identify:@"dfd" andAge:20], [QYPerson personWithName:@"Zhaoliu" identify:@"fdf" andAge:32], [QYPerson personWithName:@"tiAnqi" identify:@"kkl" andAge:27] ]; //2.1 创建一个谓词对象name == 'lisi' && age > 18 (&& and || or) predicate = [NSPredicate predicateWithFormat:@"name == 'lisi' or age > 18"]; //2.2通过谓词对象过滤person数组 NSArray *personRes = [personArray filteredArrayUsingPredicate:predicate]; NSLog(@"the array is:%@",personRes); //3 ALL ANY 施加的是结合对象 predicate = [NSPredicate predicateWithFormat:@"ALL age > 16"]; //通过谓词对数组进行评估 BOOL result = [predicate evaluateWithObject:personArray]; if (result) { NSLog(@"All of person's age are greater than 16"); }else { NSLog(@"Not Ok"); } predicate = [NSPredicate predicateWithFormat:@"ANY age > 30"]; if ([predicate evaluateWithObject:personArray]) { NSLog(@"至少有一个年龄大于30"); }else{ NSLog(@"年龄没有大于30的"); } //4.指定字符串 BEGINSWITH ENDSWITH CONTAINS [cd]([cd]不区分大写和小写和音调) //4.1过滤以指定字符串开头的数据 predicate = [NSPredicate predicateWithFormat:@"name BEGINSWITH[cd] 'zh' "]; personRes = [personArray filteredArrayUsingPredicate:predicate]; NSLog(@"BeginSwith after :%@",personRes); //4.2过滤以指定字符串结尾的数据 predicate = [NSPredicate predicateWithFormat:@"name ENDSWITH 'u'"]; personRes = [personArray filteredArrayUsingPredicate:predicate]; NSLog(@"%@",personRes); //4.3过滤包括指定字符串的数据 predicate = [NSPredicate predicateWithFormat:@"name CONTAINS[l] 'i'"]; personRes = [personArray filteredArrayUsingPredicate:predicate]; NSLog(@"%@",personRes); //5.方位运算符 IN BETWEEN //5.1 IN 筛选给定的离散数据 predicate =[NSPredicate predicateWithFormat:@"age IN {17,20}"]; personRes = [personArray filteredArrayUsingPredicate:predicate]; NSLog(@"%@",personRes); //5.2 BETWEEN 筛选给定范围内的数据 predicate = [NSPredicate predicateWithFormat:@"age BETWEEN {17,27}"]; personRes = [personArray filteredArrayUsingPredicate:predicate]; NSLog(@"%@",personRes); //6. 谓词中键的占位符 %K,谓词中使用变量 //6.1 %K NSString *keyPath = @"name"; NSString *value = @"zhangsan"; predicate = [NSPredicate predicateWithFormat:@"%K == %@",keyPath,value]; personRes = [personArray filteredArrayUsingPredicate:predicate]; NSLog(@"%@",personRes); //6.2变量($NAME)谓词模板 //6.2.1生成一个谓词模板,这个模板中,一个变量$NAME来先占位置 NSPredicate *predicateTemplate = [NSPredicate predicateWithFormat:@"name == $NAME"]; //6.2.2 为$NAME赋值的过程,事实上就是创建一个字典 NSString *name = @"lisi"; //该字典的键就是谓词模板中的变量名(NAME) NSDictionary *varDict = @{@"NAME":name}; //6.2.3 生成终于的谓词(变量已经被真实地值替换了) predicate = [predicateTemplate predicateWithSubstitutionVariables:varDict]; personRes = [personArray filteredArrayUsingPredicate:predicate]; NSLog(@"%@",personRes); predicateTemplate = [NSPredicate predicateWithFormat:@"age BETWEEN $AGE"]; NSNumber *beginAge = @17; NSNumber *endAge = @30; varDict = @{@"AGE":@[beginAge,endAge]}; predicate = [predicateTemplate predicateWithSubstitutionVariables:varDict]; personRes = [personArray filteredArrayUsingPredicate:predicate]; NSLog(@"%@",personRes); //谓词中使用通配符 like 以下单独介绍通配符 predicate = [NSPredicate predicateWithFormat:@"name like[cd] '??

    a*'"]; personRes = [personArray filteredArrayUsingPredicate:predicate]; NSLog(@"%@",personRes); //谓词中使用正則表達式 matches 以下单独介绍正則表達式 //名字中以w開始,以u结束的 NSString *regex = @"^w.*u$"; predicate = [NSPredicate predicateWithFormat:@"name matches %@",regex]; personRes = [personArray filteredArrayUsingPredicate:predicate]; NSLog(@"%@",personRes); } return 0; }

  • 相关阅读:
    thread_Semaphore信号量
    c 语言文本文件判断是否到达结尾的问题
    c语言快速排序算法(转)
    c语言双向循环链表
    gtk+学习笔记(八)
    c语言循环链表的问题
    linux c获取本地时间
    gtk+学习笔记(七)
    gtk+学习笔记(六)
    gtk+学习笔记(五)
  • 原文地址:https://www.cnblogs.com/jzssuanfa/p/7112941.html
Copyright © 2020-2023  润新知