Object-c学习笔记十八-----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的更多相关文章
- python3.4学习笔记(十八) pycharm 安装使用、注册码、显示行号和字体大小等常用设置
python3.4学习笔记(十八) pycharm 安装使用.注册码.显示行号和字体大小等常用设置Download JetBrains Python IDE :: PyCharmhttp://www. ...
- (C/C++学习笔记) 十八. 继承和多态
十八. 继承和多态 ● 继承的概念 继承(inheritance): 以旧类为基础创建新类, 新类包含了旧类的数据成员和成员函数(除了构造函数和析构函数), 并且可以派生类中定义新成员. 形式: cl ...
- Java基础学习笔记十八 异常处理
什么是异常?Java代码在运行时期发生的问题就是异常. 在Java中,把异常信息封装成了一个类.当出现了问题时,就会创建异常类对象并抛出异常相关的信息(如异常出现的位置.原因等). 异常的继承体系 在 ...
- python 学习笔记十八 django深入学习三 分页,自定义标签,权限机制
django Pagination(分页) django 自带的分页功能非常强大,我们来看一个简单的练习示例: #导入Paginator>>> from django.core.p ...
- SharpGL学习笔记(十八) 解析3ds模型并显示
笔者设想的3D仿真中的元件,是不可能都是“画”出来的.这样就玩复杂了,应该把任务分包出去,让善于制作模型的软件来制作三维模型,我们只需要解析并且显示它即可. 3dsmax制作三维模型的方便,快捷,专业 ...
- MYSQL进阶学习笔记十八:MySQL备份和还原!(视频序号:进阶_37)
知识点十九:MySQL的备份的还原(38) 一.mysql的备份 1.通过使用mysqldump的命令备份 使用mysqldump命令备份,mysqldump命令将数据库中的数据备份成一个文本文件.表 ...
- JavaScript权威设计--事件冒泡,捕获,事件句柄,事件源,事件对象(简要学习笔记十八)
1.事件冒泡与事件捕获 2.事件与事件句柄 3.事件委托:利用事件的冒泡技术.子元素的事件最终会冒泡到父元素直到跟节点.事件监听会分析从子元素冒泡上来的事件. 事件委托的好处: 1.每个函 ...
- PHP学习笔记十八【构造函数】
<?php class Person{ public $name; public $age; //定义构造函数 function 空格__construct 构造方法没有返回值,对象自动调用 p ...
- Python3学习笔记十八
1. MTV M: model 与数据库相关 T: Template 与html相关 V: views 与逻辑相关 一. URL配置 启动:python ...
随机推荐
- 从页面获取form表单提交的数据
1 使用HttpServletRequest,方便灵活 页面代码,使用action提交一个表单,里边有球的id,球的主人,球的颜色,所在省份,区域 <form action="ball ...
- IO 性能 $ iostat -kx 2$ vmstat 2 10$ mpstat 2 10$ dstat --top-io --top-bio
这些命令对于调试后端性能非常有用. 检查磁盘使用量:服务器硬盘是否已满? 是否开启了swap交换模式 (si/so)? CPU被谁占用:系统进程? 用户进程? 虚拟机? dstat 是我的最爱.用 ...
- Laravel 某个字段更新失败的原因
明明有这个title, 但是却始终更新不成功 原因是模型这里设置了可以更新的字段,所以直接用Db::table更新会成功
- stack的基本使用方式
#include <iostream> #include <stack>//头文件 using namespace std; stack<int> S; int m ...
- 关于rss的内容(转载)
转载自: https://blog.csdn.net/zhao1949/article/details/52806123 (本文对读者有帮助的话请移步支持原作者) 内容记录: 在C++技术网开通了RS ...
- CF981H K Paths
CF981H K Paths 题解 一道不错的分治ntt题目 题目稍微转化一下,就是所有k条链的存在交,并且交的部分都被覆盖k次 所以一定是两个点,之间路径选择k次,然后端点两开花 f[x]表示x子树 ...
- PHP学习(运算符)
PHP运算符一般分为算术运算符.赋值运算符.比较运算符.三元运算符.逻辑运算符.字符串连接运算符.错误控制运算符. 算术运算符 主要是用于进行算术运算的,例如:加法运算.减法运算.乘法运算.除法运算 ...
- vscode中编译输出c++是乱码
vscode中编译输出c++是乱码的解决 环境说明:windows下面运行vscode win + R 右键属性 查看当前编码状态 知道当前环境的编码格式后,可以改变vscode上c++的格式 点击v ...
- Asterisk项目概述
Asterisk是一个开源的软件包,通常运行在Linux操作系统平台上.Asterisk可以用三种协议来实现VoIP,同时可以与目前电话使用的标准硬件进行交互通信,Asterisk在实现VoIP时,不 ...
- 第一章 Web应用程序开发基础
一.HTTP协议工作机制 HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传送协议.它是一种主流B/S架构中应用的通信 ...