NSPredicate详解二

来源:互联网 发布:网络造谣大v 编辑:程序博客网 时间:2024/06/14 10:25

子查询(SUBQUERY)

子查询表达式提供一种将对检索结果进行手动后处理的操作封装进单条查询语句的方法。
        NSMutableArray *personsForTest = [NSMutableArray arrayWithCapacity:10];        for (int i = 0; i < 10; i++) {            Person *person = [[Person alloc] init];            person.age = (arc4random() % 50);            person.name = [Person generateName];            person.gender = i%2?@"male":@"female";            NSLog(@"%@", [person description]);            [personsForTest addObject:@[person]];        }        NSPredicate * predicate = [NSPredicate predicateWithFormat:@"(SUBQUERY(SELF, $x, $x.age > %d).@count > 0)", 25];        NSArray * result = [personsForTest filteredArrayUsingPredicate:predicate];        NSLog(@"\nresult:\n%@", result);
输出:
2013-12-09 10:53:29.177 ClangDemo[1622:d07] name:sle{sage:23gender:female2013-12-09 10:53:29.182 ClangDemo[1622:d07] name:vatouage:1gender:male2013-12-09 10:53:29.184 ClangDemo[1622:d07] name:kmozpage:38gender:female2013-12-09 10:53:29.186 ClangDemo[1622:d07] name:vfmvgage:40gender:male2013-12-09 10:53:29.187 ClangDemo[1622:d07] name:hasbaage:38gender:female2013-12-09 10:53:29.189 ClangDemo[1622:d07] name:yxjmnage:24gender:male2013-12-09 10:53:29.190 ClangDemo[1622:d07] name:{sgqhage:14gender:female2013-12-09 10:53:29.192 ClangDemo[1622:d07] name:wzueqage:36gender:male2013-12-09 10:53:29.193 ClangDemo[1622:d07] name:gnhusage:8gender:female2013-12-09 10:53:29.194 ClangDemo[1622:d07] name:depqyage:38gender:male2013-12-09 10:53:29.197 ClangDemo[1622:d07] result:(        (        "\nname:kmozp\nage:38\ngender:female\n"    ),        (        "\nname:vfmvg\nage:40\ngender:male\n"    ),        (        "\nname:hasba\nage:38\ngender:female\n"    ),        (        "\nname:wzueq\nage:36\ngender:male\n"    ),        (        "\nname:depqy\nage:38\ngender:male\n"    ))

集合操作语法(返回值为符合查询条件的集合)


操作符说明

  • avg

计算集合中属性的平均值

[NSPredicate predicateWithFormat:@"employees.@avg.age = %d", 24]
  • count

计算集合中的元素总数(不需要属性做参数)

[NSPredicate predicateWithFormat:@"(SUBQUERY(employees, $x, $x.age == %d).@count > 0)", 26]
  • min

计算集合中元素的指定属性参数最小值

[NSPredicate predicateWithFormat:@"employees.@min.age = %d", 22]
  • max

计算集合中元素的指定属性参数最大值

[NSPredicate predicateWithFormat:@"employees.@max.age = %d" , 22]
  • sum

计算集合中所有元素指定属性值的和

[NSPredicate predicateWithFormat:@"employees.@sum.age > %d" , 100]



原创粉丝点击