美文网首页
NSPredicate 的使用

NSPredicate 的使用

作者: liangZhen | 来源:发表于2017-09-12 18:30 被阅读0次

在我们写程序中往往会遇到一些查找的操作,比如一个数组里面全是PersionModel,如果要找出年龄大于40岁的如何操作?大多数人可能会用循环+判断条件来找出符合要求的PersionModel。但是如果使用NSPredicate,不需要循环两行代码即可,是不是很爽?下面我们简单的看一下NSPredicate的使用。

NSPredicate的使用步骤只需两步

  1. 创建一个NSPredicate并加上
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"筛选条件"];

2.将所有数据放入predicate进行过滤

NSArray *temp = [persions filteredArrayUsingPredicate:predicate];

是不是爽翻了?这里面的关键点就是设置筛选条件,先看一下NSPredicate的一些保留关键字

AND、OR、IN、NOT、ALL、ANY、SOME、NONE、LIKE、CASEINSENSITIVE、CI、MATCHES、CONTAINS、BEGINSWITH、ENDSWITH、BETWEEN、NULL、NIL、SELF、TRUE、YES、FALSE、NO、FIRST、LAST、SIZE、ANYKEY、SUBQUERY、CAST、TRUEPREDICATE、FALSEPREDICATE

保留关键字是不区分大小写的,这里推荐使用大写。下图是对关键字的简单解释说明。

原谅我无耻的盗图

有了这个图表,我们就可以对照着写几个例子了。
下面的例子都用到的公共代码

 NSMutableArray * persions = [NSMutableArray array];
    
    NSArray * names = @[@"张三",@"李四",@"王二",@"麻子",@"马户",@"朱雀"];
    NSArray * ages = @[@120,@148,@93,@42,@39,@17];
    
    NSArray * sunNames = @[@"张三儿",@"李四儿",@"王二儿",@"麻子儿",@"马户儿",@"朱雀儿"];
    NSArray * sunAges = @[@120,@148,@93,@42,@39,@17];

    for (NSInteger i = 0; i < names.count; i++) {
        Persion * persion = [[Persion alloc] init];
        persion.name = names[i];
        persion.age = ages[i];
        
        Sun * sun = [[Sun alloc] init];
        sun.name = sunNames[i];
        sun.age = sunAges[i];
        persion.sun = sun;
        [persions addObject:persion];
    }

1.找出所有名字在指定结合里面的所有对象(这里使用了关键字IN)

 //自己儿子的名字是@[@"王二儿",@"朱雀儿",@"张三儿"]的所有对象
    NSArray * sunName = @[@"王二儿",@"朱雀儿",@"张三儿"];
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF.sun.name IN%@",sunName];
    NSArray *temp = [persions filteredArrayUsingPredicate:predicate];
//如果想要获取除去自己儿名字是[@"王二儿",@"朱雀儿",@"张三儿"]的所有对象,只需在筛选条件加NOT即可
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"NOT (SELF.sun.name IN%@)",sunName];

2.找出年龄在某一区间的所有对象

    //年龄在39-120之间的 这里是闭区间[39, 120]
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self.age BETWEEN{39,120}"];
    NSArray *temp = [persions filteredArrayUsingPredicate:predicate];
   //判断条件换成下面的代码效果一样。
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self.age >= 39 && self.age <= 120"];

3.名字中包含“二”的所有对象

   //名字中包含 ‘二’ 的所有对象
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self.name LIKE[cd] '*二*'"];
    NSArray *temp = [persions filteredArrayUsingPredicate:predicate];

  // *为通配,与下面的CONTAINS关键字筛选条件一样
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self.name CONTAINS[cd] '二'"];

   //名字中是以 ‘王’开头所有对象
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self.name BEGINSWITH[cd] '王'"];
    NSArray *temp = [persions filteredArrayUsingPredicate:predicate];
    //另外 ENDSWITH 用法与上面的BEGINSWITH相似。是以**为结尾的所有对象

4.自己儿子的age与自己age相等的所有对象

    //自己的age == sun.age 的
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self.age == self.sun.age"];
    NSArray *temp = [persions filteredArrayUsingPredicate:predicate];
   //如果不相等就是 !=

看到这里你是不是再也不想使用循环了?当然NSPredicate 的使用不仅于此,更多API大家可以command进入查看。

相关文章

  • 排序进阶(NSPredicate、NSSortDescripto

    一、NSPredicate的使用 1、> 的使用 NSPredicate*predicate = [NSPredi...

  • [OC基础]NSPredicate

    NSPredicate,用来指定过滤器条件的对象 创建 NSPredicate 对象 使用 NSPredicate...

  • 使用NSPredicate

    使用简单的谓词: NSPredicate *predicate = [NSPredicate predicated...

  • iOS 中的特殊类

    NSPredicate NSPredicate 是预测的意思,但我们常翻译成谓词。 使用NSPredicate可以...

  • NSPredicate使用

    NSPredicate 的使用

  • NSPredicate使用

    之前对NSPredicate了解过,但是过滤有一段时间给忘记了..这次记录一下,省的忘记 1.对数组中是 Mode...

  • NSPredicate使用

    谓词(NSPredicate) OC中的谓词操作是针对于数组类型的,他就好比数据库中的查询操作,数据源就是数组,这...

  • NSPredicate使用

    NSPredicate是一个Foundation类,它指定数据被获取或者过滤的方式。 NSPredicate使用时...

  • NSPredicate的使用

    NSPredicate是一个Foundation类,它指定数据被获取或者过滤的方式。它的查询语言就像SQL的WHE...

  • NSPredicate 的使用

    在我们写程序中往往会遇到一些查找的操作,比如一个数组里面全是PersionModel,如果要找出年龄大于40岁的如...

网友评论

      本文标题:NSPredicate 的使用

      本文链接:https://www.haomeiwen.com/subject/gvbfsxtx.html