Object-c---NSPredicate用法

简介:

Cocoa提供了一个类NSPredicate类,该类主要用于指定过滤器的条件,该对象可以准确的描述所需条件,对每个对象通过谓词进行筛选,判断是否与条件相匹配。谓词表示计算真值或假值的函数。

    NSPredicate *predicate;

    predicate=[NSPredicatepredicateWithFormat:@"name=='Herbie'"];//predicateWithFormat创建一个谓词,name作为键路径

   BOOL match=[predicateevaluateWithObject:car];//car作为接收对象,evaluateWithObject返回一个bool值。

    NSLog(@"%s",(match)?"YES":"NO");


  predicate = [NSPredicatepredicateWithFormat:@"engine.horsepower > 150"];

    NSArray *cars = [garage cars];

    for (Car *car in [garage cars]) {

        if ([predicate evaluateWithObject: car]) {

            NSLog (@"%@", car.name);

        }

    }

遍历cars判断是否是真,然后输出。

  predicate = [NSPredicatepredicateWithFormat:@"engine.horsepower > 150"];

    NSArray *results;

    results = [carsfilteredArrayUsingPredicate: predicate];//它将循环过滤数组内容,根据谓词计算每个对象的值,并将值为YES的对象累计到将被返回的新数组中。

    NSLog (@"%@", results);

filteredArrayUsingPredicate这个方法可以得到我们所需要的值。加上

   NSArray *names;

    names=[results valueForKey:@"name"];

    NSLog (@"%@", names);

就和上面的值一样。

    NSMutableArray *carsCopy = [carsmutableCopy];

    [carsCopyfilterUsingPredicate: predicate];//filterUsingPredicateNSMutableArray构成新数组。

    NSLog (@"%@", carsCopy);

    

    predicate = [NSPredicatepredicateWithFormat:@"engine.horsepower > %d"50];

    results = [cars filteredArrayUsingPredicate: predicate];

    NSLog (@"%@", results);

    

    NSPredicate *predicateTemplate;

    NSDictionary *varDict;

    predicateTemplate = [NSPredicatepredicateWithFormat@"engine.horsepower > $POWER"];//创建一个键/值字典来存储,这里$符号用于变量

    varDict = [NSDictionarydictionaryWithObjectsAndKeys:

               [NSNumbernumberWithInt150],@"POWER"nil];//@后面参数名

    predicate = [predicateTemplatepredicateWithSubstitutionVariables: varDict];

    results = [cars filteredArrayUsingPredicate: predicate];

    NSLog (@"%@", results);


  predicate = [NSPredicatepredicateWithFormat:

                @"(engine.horsepower > 50) AND (engine.horsepower < 200)"];//可以运用运算符

    results = [cars filteredArrayUsingPredicate: predicate];

    NSLog (@"oop %@", results);

    

    predicate = [NSPredicatepredicateWithFormat:

                @"engine.horsepower BETWEEN { 50, 200 }"];//这里可以运用between关键字。和上面效果一样

    results = [cars filteredArrayUsingPredicate: predicate];

    NSLog (@"%@", results);

    

    NSArray *betweens = [NSArray arrayWithObjects:

                         [NSNumbernumberWithInt50], [NSNumbernumberWithInt200],nil];

    predicate = [NSPredicatepredicateWithFormat@"engine.horsepower BETWEEN %@", betweens];

    results = [cars filteredArrayUsingPredicate: predicate];

    NSLog (@"%@", results);

    

    predicateTemplate = [NSPredicatepredicateWithFormat:@"engine.horsepower BETWEEN $POWERS"];

    varDict = [NSDictionarydictionaryWithObjectsAndKeys: betweens, @"POWERS"nil];

    predicate = [predicateTemplatepredicateWithSubstitutionVariables: varDict];//用变量

    results = [cars filteredArrayUsingPredicate: predicate];

    NSLog (@"%@", results);

    

    predicate = [NSPredicatepredicateWithFormat:@"name < 'Newton'"];//不等号不仅可以用于数字,也可以用于字符串值。

    results = [cars filteredArrayUsingPredicate: predicate];

    NSLog (@"%@", [results valueForKey@"name"]);

    

    predicate = [NSPredicatepredicateWithFormat:@"name IN { 'Herbie', 'Snugs', 'Badger', 'Flap' }"];//包含在其中用IN

    results = [cars filteredArrayUsingPredicate: predicate];

    NSLog (@"%@", [results valueForKey@"name"]);

    

    predicate = [NSPredicatepredicateWithFormat:@"SELF.name IN { 'Herbie', 'Snugs', 'Badger', 'Flap' }"];//self关键字

    results = [cars filteredArrayUsingPredicate: predicate];

    NSLog (@"%@", [results valueForKey@"name"]);

    

    names = [cars valueForKey@"name"];

    predicate = [NSPredicatepredicateWithFormat:@"SELF IN { 'Herbie', 'Snugs', 'Badger', 'Flap' }"];//self关键字

    results = [namesfilteredArrayUsingPredicate: predicate];

    NSLog (@"%@", results);

    

    predicate = [NSPredicatepredicateWithFormat:@"name BEGINSWITH 'Bad'"];//字符串运算符BEGINSWITH,ENDSWITH,CONTAINS[c][d][cd]

    results = [cars filteredArrayUsingPredicate: predicate];

    NSLog (@"%@", results);

BEGINSWITH:检查某个字符串是否以另一个字符串开头。

ENDSWITH:检查某个字符串是否以另一个字符串结尾。

CONTAINS:检查某个字符串是否以另一个字符串内部。

[c]不区分大小写[d]不区分发音符号即没有重音符号[cd]既不区分大小写,又不区分发音符号。

    predicate = [NSPredicatepredicateWithFormat:@"name LIKE[cd] '*er*'"];//*代表通配符Like还接受[cd].

    results = [cars filteredArrayUsingPredicate: predicate];

    NSLog (@"%@", results);

    

    predicate = [NSPredicatepredicateWithFormat:@"name LIKE[cd] '???er*'"];//?只匹配一个字符并且还可以接受[cd].

    results = [cars filteredArrayUsingPredicate: predicate];

    NSLog (@"%@", results);

还可以使用MATCHES运算符。赋给该运算符一个正则表达式。

目录
相关文章
|
1月前
|
SQL Java 关系型数据库
MyBatis的动态SQL之OGNL(Object-Graph Navigation Language)表达式以及各种标签的用法
MyBatis的动态SQL之OGNL(Object-Graph Navigation Language)表达式以及各种标签的用法
26 0
|
1月前
|
前端开发 JavaScript 容器
你知道css中的object-fit的用法吗?
你知道css中的object-fit的用法吗?
68 0
|
9月前
|
Java
JAVA_Object 类的用法
JAVA_Object 类的用法
35 0
|
JavaScript 开发者
ES6之Object.assign()用法,Object.assign()到底是浅拷贝还是深拷贝?
ES6之Object.assign()用法,Object.assign()到底是浅拷贝还是深拷贝?
6587 1
ES6 Object.assign()的用法
ES6 Object.assign()的用法
87 0
Object.defineProperty熬夜整理的用法,保证你看的明白!
Object.defineProperty熬夜整理的用法,保证你看的明白!
Object.defineProperty熬夜整理的用法,保证你看的明白!
成功解决AttributeError: 'BasicLSTMCell' object has no attribute '_kernel'+python下划线用法的几种常见用法理解
成功解决AttributeError: 'BasicLSTMCell' object has no attribute '_kernel'+python下划线用法的几种常见用法理解
Object C学习笔记21-typedef用法
  在上一章的学习过程中遇到了一个关键字typedef,这个关键字是C语言中的关键字,因为Object C是C的扩展同样也是支持typedef的。      一. 基本作用     typedef是C中的关键字,它的主要作用是给一个数据类型定义一个新的名称,这些类型报告内部数据类型,比如int,char 还有自定义类型struct,enum等。
971 0
Object C学习笔记22-#define 用法
  上一篇讲到了typedef 关键字的使用,可以参考文章 Object C 学习笔记--typedef用法 。而在c中还有另外一个很重要的关键字#define.   一. #define 简介     在C中利用预处理代码,可以让你的代码变得更加具有可读性,更加符合个人的编码风格,这也是C的强大之处。
1044 0