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. java使用正则表达式,去除windows系统中文件名的非法路径

    w哦我爬取一个页面,并且把附件下载下来,保存,有的时候文件名,带*号,所以,无法保存 这时候就要删除所有的非法字符 String fileName = resourceName + fileTypt; ...

  2. JAVA短信验证码 工具类

    MsgCodeUtil.java package com.hg.util; import com.soyea.enums.ResultEnum; import com.soyea.exception. ...

  3. 洛谷P1969 [NOIP2013提高组Day2T1] 积木大赛

    P1969 积木大赛 题目描述 春春幼儿园举办了一年一度的“积木大赛”.今年比赛的内容是搭建一座宽度为n的大厦,大厦可以看成由n块宽度为1的积木组成,第i块积木的最终高度需要是hi. 在搭建开始之前, ...

  4. Laravel(PHP)使用Swagger生成API文档不完全指南 - 基本概念和环境搭建 - 简书

    在PHPer中,很多人听说过Swagger,部分人知道Swagger是用来做API文档的,然而只有少数人真正知道怎么正确使用Swagger,因为PHP界和Swagger相关的资料实在是太少了.所以鄙人 ...

  5. 杨柳絮-Info:阜阳市多举措治理杨柳絮问题

    ylbtech-杨柳絮-Info:阜阳市多举措治理杨柳絮问题 1.返回顶部 1. 阜阳市多举措治理杨柳絮问题 2019-4-15 10:34| 发布者: 戴斐 | 查看: 56407| 评论: 0|原 ...

  6. DirectX11笔记(十一)--Direct3D渲染7--RENDER STATES

    原文:DirectX11笔记(十一)--Direct3D渲染7--RENDER STATES 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u010 ...

  7. 笔记:投机和投资 F4NNIU

    笔记:投机和投资 F4NNIU 投机是零和交易. 投资是正和博弈. 投机看是短期,只关心当下. 投资是看的长期,更关注未来. 投机容易分散注意力. 投资更关心交易外的注意力. 投机像是看运气,运气有好 ...

  8. C++不支持默认的int

    VS: 工程属性->C/C++->命令行->输入 /wd4430

  9. C​#​字​符​串​与​ ​b​y​t​e​数​据​的​互​相​转​换

    string和byte[]的转换 (C#) string类型转成byte[]: byte[] byteArray = System.Text.Encoding.Default.GetBytes ( s ...

  10. Maximum Depth of Binary Tree 树的最大深度

    Given a binary tree, find its maximum depth. The maximum depth is the number of nodes along the long ...