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];//filterUsingPredicate和NSMutableArray构成新数组。

NSLog (@"%@", carsCopy);

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

results = [cars filteredArrayUsingPredicate: predicate];

NSLog (@"%@", results);

NSPredicate *predicateTemplate;

NSDictionary *varDict;

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

varDict = [NSDictionarydictionaryWithObjectsAndKeys:

[],@"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:

[], [],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运算符。赋给该运算符一个正则表达式。

Object-c学习笔记十八-----NSPredicate的更多相关文章

  1. python3.4学习笔记(十八) pycharm 安装使用、注册码、显示行号和字体大小等常用设置

    python3.4学习笔记(十八) pycharm 安装使用.注册码.显示行号和字体大小等常用设置Download JetBrains Python IDE :: PyCharmhttp://www. ...

  2. (C/C++学习笔记) 十八. 继承和多态

    十八. 继承和多态 ● 继承的概念 继承(inheritance): 以旧类为基础创建新类, 新类包含了旧类的数据成员和成员函数(除了构造函数和析构函数), 并且可以派生类中定义新成员. 形式: cl ...

  3. Java基础学习笔记十八 异常处理

    什么是异常?Java代码在运行时期发生的问题就是异常. 在Java中,把异常信息封装成了一个类.当出现了问题时,就会创建异常类对象并抛出异常相关的信息(如异常出现的位置.原因等). 异常的继承体系 在 ...

  4. python 学习笔记十八 django深入学习三 分页,自定义标签,权限机制

    django  Pagination(分页) django 自带的分页功能非常强大,我们来看一个简单的练习示例: #导入Paginator>>> from django.core.p ...

  5. SharpGL学习笔记(十八) 解析3ds模型并显示

    笔者设想的3D仿真中的元件,是不可能都是“画”出来的.这样就玩复杂了,应该把任务分包出去,让善于制作模型的软件来制作三维模型,我们只需要解析并且显示它即可. 3dsmax制作三维模型的方便,快捷,专业 ...

  6. MYSQL进阶学习笔记十八:MySQL备份和还原!(视频序号:进阶_37)

    知识点十九:MySQL的备份的还原(38) 一.mysql的备份 1.通过使用mysqldump的命令备份 使用mysqldump命令备份,mysqldump命令将数据库中的数据备份成一个文本文件.表 ...

  7. JavaScript权威设计--事件冒泡,捕获,事件句柄,事件源,事件对象(简要学习笔记十八)

    1.事件冒泡与事件捕获 2.事件与事件句柄   3.事件委托:利用事件的冒泡技术.子元素的事件最终会冒泡到父元素直到跟节点.事件监听会分析从子元素冒泡上来的事件. 事件委托的好处:     1.每个函 ...

  8. PHP学习笔记十八【构造函数】

    <?php class Person{ public $name; public $age; //定义构造函数 function 空格__construct 构造方法没有返回值,对象自动调用 p ...

  9. Python3学习笔记十八

    1.    MTV M:   model     与数据库相关 T:   Template    与html相关 V:   views      与逻辑相关 一.    URL配置 启动:python ...

随机推荐

  1. 你需要一个新的model实体的时候必须new一个.奇怪的问题: 使用poi解析Excel的把数据插入数据库同时把数据放在一个list中,返回到页面展示,结果页面把最后一条数据显示了N次

    数据库显示数据正常被插 插入一条打印一次数据,也是正常的,但是执行完,list就全部变成了最后一条数据.很奇怪 单步调试 给list插入第一条数据 model是6607 连续插了多条数据都是6607 ...

  2. MyBatis连接Neo4j问题记录:mapper参数传递(节点标签作为参数)

    MyBatis与Neo4j的连接我在上一篇做了,这是链接:https://blog.csdn.net/qq_34233510/article/details/82496101 上一篇中UserMapp ...

  3. 客户端用javascript填充Dropdownlist,服务器端获取不到Dropdownlist的值

    今天遇到一个奇怪的问题,某一页面需要使用三级级联下拉列表框.为提高用户体验,采用jQuery的cascadingDropDown插件调用后台Web Services来实现ajax填充. 填充没有任何问 ...

  4. perfcurve.m

    function [X,Y,T,auc,optrocpt,subY,subYnames] = ... perfcurve(labels,scores,posClass,varargin) %PERFC ...

  5. arcgis访问百度地图

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  6. nested exception is org.hibernate.MappingException解决方案

    1.可能是因为映射文件( Order.hbm.xm)配置的class路径出错 <hibernate-mapping> <class name="com.web.bean.O ...

  7. python变量、变量属性

    1.简述执行Python程序的两种方式以及他们的优缺点 答:交互型优点:马上就能看到结果,排错方便.交互型缺点:代码无法保存,断电即消失 命令型优点:代码永久保存.命令型缺点:不易排错 2.简述Pyt ...

  8. iOS开发中WiFi相关功能总结

    http://www.cocoachina.com/ios/20160715/17022.html 投稿文章,作者:Haley_Wong(简书) 查漏补缺集是自己曾经做过相关的功能,但是重做相关功能或 ...

  9. Leetcode876.Middle of the Linked List链表的中间节点

    给定一个带有头结点 head 的非空单链表,返回链表的中间结点. 如果有两个中间结点,则返回第二个中间结点. 示例 1: 输入:[1,2,3,4,5] 输出:此列表中的结点 3 (序列化形式:[3,4 ...

  10. JS黑科技

    1.论如何优雅的取随机字符串 Math.random().toString(16).substring(2) // 13位 Math.random().toString(36).substring(2 ...