NSPredicate的学习

来源:互联网 发布:json数组添加对象 编辑:程序博客网 时间:2024/05/22 23:15
     谓词主要用于对集合元素进行筛选

     Foundation提供使用谓词(predicate)来过滤NSArray/NSMutableArray&NSSet/NSMutableSet的方法。
 不可变的集合,NSArray&NSSet,有可以通过评估接收到的predicate来返回一个不可变集合的方法filteredArrayUsingPredicate:和filteredSetUsingPredicate:。
 可变集合,NSMutableArray&NSMutableSet,可以使用方法filterUsingPredicate:,它可以通过运行接收到的谓词来移除评估结果为FALSE的对象。
 
      NSDictionary可以用谓词来过滤它的键和值(两者都为NSArray对象)。NSOrderedSet可以由过滤的NSArray或NSSet生成一个新的有序的集,或者NSMutableSet可以简单的removeObjectsInArray:,来传递通过_否定_predicate过滤的对象。


  
    理解谓词表达式的语法

    1:基本的比较运算符
      1) =,==: 表示两个表达式是否相等
      2) >=,=>: 判断左边表达式的值是否大于或等于右边表达式的值.
      3) <=,=<: 判断左边表达式的值是否小于或等于右边表达式的值.
      4) >: 判断左边表达式的值是否大于右边表达式的值.
      5) <: 判断左边表达式的值是否小于右边表达式的值.
      6) !=,<>: 判断两个表达式是否不相等.
      7) BETWEEN: BETWEEN表达式必须满足"表达式 BETWEEN{下限,上限}"的格式,要求该表达式的值必须大于或等于下限,并小于或等于上限.
    
    2:基本逻辑运算符
      1) AND,&&: 逻辑与,要求两个表达式的值都为YES,结果才是YES.
      2) OR,||:  逻辑或,要求任何一个表达式的值为YES,结果才是YES.
      3) NOT,!:  逻辑非,对原有的表达式结果取反.
    
    3:字符串比较运算符
      1) BEGINSWITCH:检査某个字符串是否以指定字符串的子串开头
      2) ENDSWTICH:检査某个字符串是否以指定字符串的子串结尾
      3) CONTAINS:检査某个字符串是否包含指定字符串的子串
      4) LIKE:检査某个字符串是否匹配指定的字符串模板.LIKE运算符后面可使用字符串模版,该字符串模版允许使用*和?两个通配符,其中*代表任意多个字符,?代表一个字符.比如"name LIKE *er*",这要求 name 的值包含 er子串,则返回 YES;有比如"pass LIKE ??er*",这要求 name 的值必须先有两个任意字符,接下来是 er字符,任何可以是任意子串,则返回 YES.
      5) MATCHES:检査某个字符串是否匹配指定的正则表达式,MATCHES后面可以使用正则表达式,虽然正则表达式的概念最强大,但执行效率也是最低的,因此,能够用前面的运算符解决的,就使用前面的.说明一点这些运算符都是区分大小写和重音符号的,例如"name BEGINWITCH 'fkja'",当 name为fkjava是返回 YES, 当name为 FKJAVA时,将会返回 NO,因为字符串区分大小写.
         如果希望字符串比较运算符不区分大小写和重音字符号,可在这些运算符后面使用[c],[d],其中[c]指定不区分大小写,[d]指定不区分重音符号.
    4:操作集合的运算符
      1) ANY,SOME: 指定只要集合任意一个元素满足条件,即可返回 YES.例如, ANY children.age<18,只要children集合中任意一个元素的 age小于18,即可返回 YES.
      2) ALL:指定要求集合中所有的元素满足条件返回 YES.ALL children.age<18,只要children集合中所有元素的 age小于18,即可返回 YES.
      3) NONE: 指定要求集合没有任何元素满足条件才返回 YES.例如,ALL children.age<18,只要children集合中所有元素的 age 都不小于18,即可返回 YES.
      4) IN:该运算符基本等价于 SQL 语句中的 IN 运算符,只有当左边表达式或值出现在右边的集合中才会返回 YES. 例如: name IN {'Ben','Melissa','Nick'},只有当name的值为'Ben','Melissa','Nick'之一才返回 YES.
      4) array[index]: 返回array数组中index索引处的元素.
         array[FIRST]: 返回array数组中第一个元素.
         array[LAST]: 返回array数组中最后一个元素.
         array[SIZE]: 返回array数组中元素的个数.
    
    //5:直接量
      FALSE,NO :代表逻辑假
      TRUE,YES :代表逻辑真
      NULL,NIL :代表空值
      SELF     :代表正在被判断的对象本身.
      "text",'text': 代表字符串
   


下面一起学习一下:












0 0
原创粉丝点击