NSPredicate是什么?

NSPredicate 是预测的意思 但是我们常翻译成谓词

它可以干什么?

使用NSPredicate可以定义模糊查询条件 根据一定的条件 我们就可以从一个数组中快速找出 符合一定条件的元素对象

本次的示范我们沿用上次讲的 NSSortDescriptor 的使用 里面的代码 我们只需要稍微的修改一下 导航栏右边的按钮 为‘搜索年龄大于20的对象’ 然后再把点击左上角按钮的业务代码修改为如下:

- (IBAction)sortAge:(id)sender {

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"age>20"]; //创建NSPredicate对象 并定义查询条件

    self.datas =   [[self.datas filteredArrayUsingPredicate:predicate] mutableCopy]; //使用数组的filteredArrayUsingPredicate方法 获取符合我们指定条件的对象
   [self.tableView reloadData]; 

}

这个时候我们点击左上角的按钮 就可以查询出数组里面 年龄大于20的对象

除了 > 号之外 我们还可以用IN 查询两个数组的交集

我们新建一个程序 来测试IN 的用法  我们在ViewDidload方法里面 写入如下代码:

- (void)viewDidLoad {
[super viewDidLoad]; NSArray *array1 = [NSArray arrayWithObjects:@,@,@,@,@,@,@,@, nil];
NSArray *array2 = [NSArray arrayWithObjects:@,@, nil]; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF in%@",array2]; //SELF 代表本身 IN可以大写也可以小写
    NSArray *temp = [array1 filteredArrayUsingPredicate:predicate]; //表示获取 array2 和 array1中的交集
NSLog(@"temp ====\n%@",temp); }

运行 打印结果为:

temp ====

(

4,

6

)

可以看到这两个数组的交集就是4和6 因为这两个数组中 都有4和6 这个元素

同时除了IN 之外 BETWEEN可以获取一定范围的值 示例代码如下:

- (void)viewDidLoad {
[super viewDidLoad];

NSArray *array1 = [NSArray arrayWithObjects:@100,@20,@3,@4,@4,@6,@7,@1, nil];

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF BETWEEN{1,20}"];
NSArray *temp = [array1 filteredArrayUsingPredicate:predicate]; NSLog(@"temp ====\n%@",temp); }

上面的代码表示找出 值在1到20范围类的值包括首尾

打印结果如下:

temp ====

(

20,

3,

4,

4,

6,

7,

1

)

当然除了上面介绍的两个用法之外 还有其他的比较运算符>,<,==,>=,<=,!=

这里以等于号==为例:

- (void)viewDidLoad {
[super viewDidLoad]; NSArray *array1 = [NSArray arrayWithObjects:@,@,@,@,@,@,@,@, nil]; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF ==6"]; NSArray *temp = [array1 filteredArrayUsingPredicate:predicate]; NSLog(@"temp ====\n%@",temp); }

打印结果如下:

temp ====

(

6

)

同时还有以下与字符串操作相关的关键词 :

BEGINSWITH  :以某个字符串开头

ENDSWITH     :以某个字符串结尾

CONTAINS      :是否包含某个字符串

同时这三个关键词后面还可以跟上一些格式符号 如:BEGINSWITH[cd] c表示不区分大小写 d表示不区分发音符号 cd就可以表示即不区分大小写 也不区分发音符号

- (void)viewDidLoad {
[super viewDidLoad]; NSArray *array1 = [NSArray arrayWithObjects:@"jack",@"anne",@"reserved",@"control" ,@"type",@"soure",@"version",nil]; //查询出包含e这个字符的字符串
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF CONTAINS[cd] 'E' "]; NSArray *temp = [array1 filteredArrayUsingPredicate:predicate]; NSLog(@"temp ====\n%@",temp); }

打印结果如下:

temp ====

(

anne,

reserved,

type,

soure,

version

)

 

- (void)viewDidLoad {
[super viewDidLoad]; NSArray *array1 = [NSArray arrayWithObjects:@"jack",@"anne",@"reserved",@"control" ,@"type",@"soure",@"version",nil]; //查询出以a这个字符开头的字符串
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF BEGINSWITH[cd] 'a' "]; NSArray *temp = [array1 filteredArrayUsingPredicate:predicate]; NSLog(@"temp ====\n%@",temp); }

打印结果如下:

temp ====

(

anne

)

- (void)viewDidLoad {
[super viewDidLoad]; NSArray *array1 = [NSArray arrayWithObjects:@"jack",@"anne",@"reserved",@"control" ,@"type",@"soure",@"version",nil]; //查询出以e这个字符结尾的字符串
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF ENDSWITH[cd] 'e' "]; NSArray *temp = [array1 filteredArrayUsingPredicate:predicate]; NSLog(@"temp ====\n%@",temp); }

打印结果如下:

temp ====

(

anne,

type,

soure

)

还有一个你可能会用到的关键字 LIKE  他后面也可以写[cd]格式符号

- (void)viewDidLoad {
[super viewDidLoad]; NSArray *array1 = [NSArray arrayWithObjects:@"jack",@"anne",@"reserved",@"control" ,@"type",@"soure",@"version",nil]; //查询出包含e这个字符的字符串
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF like[cd] '*e*' "]; //*表示通配符 NSArray *temp = [array1 filteredArrayUsingPredicate:predicate]; NSLog(@"temp ====\n%@",temp); }

打印结果如下:

temp ====

(

anne,

reserved,

type,

soure,

version

)

最后附上所有的相关的条件字符

 

 

NSPredicate 的使用的更多相关文章

  1. 谓词 (NSPredicate)使用详情

    谓词 更加详细:http://blog.csdn.net/ztp800201/article/details/8116081 //判断是否满足条件 第一种 判断一个数组(array)中满足条件的 NS ...

  2. NSPredicate 过滤功能

    NSPredicate *resultPredicate = [NSPredicate predicateWithFormat:@"self contains[cd] %@", i ...

  3. IOS开发之--NSPredicate

    我把常用的NSPredicate使用场景整理了一下   官方参考: https://developer.apple.com/library/mac/#documentation/Cocoa/Refer ...

  4. NSPredicate

    NSPredicate 1. 正则表达式使用单个字符串来描述.匹配一系列符合某个句法规则的字符串.通常被用来检索.替换那些符合某个模式的文本. 2. iOS中正则使用 有三种(NSPredicate, ...

  5. NSPredicate谓词

    NSPredicate——谓词(is) 作用:判断条件表达式的求值返回真或假的过程 使用步骤: . 定义NSPredicate对象并指定条件 . 调用谓词的evaluateWithObject方法判断 ...

  6. 【原/转】iOS中非常强大的过滤器:NSPredicate

    在APPLE的官方Demo:UICatalog中实现UISearchBar模糊搜索功能是这么做的: - (void)viewDidLoad { [super viewDidLoad]; self.al ...

  7. NSPredicate简单应用

    1.筛选纯字符串数组的内容 NSArray *array = [[NSArray alloc]initWithObjects:@"beijing",@"shanghai& ...

  8. iOS开发之--NSPredicate

    简述:Cocoa框架中的NSPredicate用于查询,原理和用法都类似于SQL中的where,作用相当于数据库的过滤取. 定义(最常用到的方法): NSPredicate *ca = [NSPred ...

  9. NSPredicate 根据谓语动词 进行 模糊查询

    /** *  模糊查询 */ NSString *filterString = textField.text; NSPredicate *predicate = [NSPredicate predic ...

随机推荐

  1. Dom的继承关系

    Document对象: 是Html文档的根节点,拥有其他的节点(element nodes, text nodes, attribute nodes, and comment nodes),并提供了获 ...

  2. ASP.NET Core 十种方式扩展你的 Views

    原文地址:http://asp.net-hacker.rocks/2016/02/18/extending-razor-views.html 作者:Jürgen Gutsch 翻译:杨晓东(Savor ...

  3. .NET Framework 4.5.2 静默安装参数

    Microsoft .NET Framework 4.5.2 是针对 Microsoft .NET Framework 4.Microsoft .NET Framework 4.5 和 Microso ...

  4. 安卓动态调试七种武器之孔雀翎 – Ida Pro

    安卓动态调试七种武器之孔雀翎 – Ida Pro 作者:蒸米@阿里聚安全 0x00 序 随着移动安全越来越火,各种调试工具也都层出不穷,但因为环境和需求的不同,并没有工具是万能的.另外工具是死的,人是 ...

  5. 剑指Offer面试题:9.二进制中1的个数

    一.题目:二进制中1的个数 题目:请实现一个函数,输入一个整数,输出该数二进制表示中1的个数.例如把9表示成二进制是1001,有2位是1.因此如果输入9,该函数输出2. 二.可能引起死循环的解法 一个 ...

  6. ASP.Net MVC3 图片上传详解(form.js,bootstrap)

    图片上传的插件很多,但很多时候还是不能切合我们的需求,我这里给大家分享个我用一个form,file实现上传四张图片的小demo.完全是用jquery前后交互,没有用插件. 最终效果图如下: 玩过花田人 ...

  7. [Oracle](不会的是三炮)把状态列表作为存储过程参数这件小事

    抱歉用了这么渣的标题,其实是一个很简单而且很常见的需求:假设我们有一个学生表,它有一个状态字段: create table T_STU ( STU_ID ) not null, NAME ), COD ...

  8. 今天Windows Azure Live to Code的分享

    今天参加了微软广州的Live to Code,晚上回公司OT写了封报告E-mail,也没让公司今天白出工资给我... 因为没有涉及到公司机密什么的,所以就拿出来跟大家分享一下. 首先要说明的是,在会议 ...

  9. 【Prince2是什么】PRINCE2认证之项目四大管理步骤

    昨天谈到PRINCE2要求项目经理在做项目的时候要考虑四大核心指标(成本.时间.质量.范围)加风险与收益这两个重要要素. 然后PRINCE2基于这几大要素进行了四大管理步骤,分别是: 1.计划 2.授 ...

  10. Android-异步任务-AsyncTask

    什么是异步任务? 异步任务就是开一个子线程,然后让它去跑,它跑完了就会回来告诉你说,它跑完了,这是结果.这和Java中的回调差不多.我们在OKHttp中很长见到的 onSuccess() 和 onEr ...