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. 【转】Artificial Neurons and Single-Layer Neural Networks

    原文:written by Sebastian Raschka on March 14, 2015 中文版译文:伯乐在线 - atmanic 翻译,toolate 校稿 This article of ...

  2. 多彩的Console打印新玩法

    Chrome应该是每一个Web开发者必备的工具之一.它有而强大的Devtool,辅助我们的JavaScript调试,审视DOM元素,CSS即时修改等.以及它还有一个的庞大的插件系统,同时我们也可以很容 ...

  3. 探索c#之尾递归编译器优化

    阅读目录: 递归运用 尾递归优化 编译器优化 递归运用 一个函数直接或间接的调用自身,这个函数即可叫做递归函数. 递归主要功能是把问题转换成较小规模的子问题,以子问题的解去逐渐逼近最终结果. 递归最重 ...

  4. 记录Office Add-in开发经验

    原创文章转载请注明出处:@协思, http://zeeman.cnblogs.com 得益于微软系强大的共通能力和Visual Studio的开发支持,做Office插件不是什么难事.一点经验记录如下 ...

  5. 链表&LRU

    简介 链表就是链式存储数据的一种数据结构.双向链表每个数据存储都包含他的前后数据节点的位置信息(索引/指针). class DSChain<T> { //使用栈来进行废弃空间回收 priv ...

  6. 你真的会用java replaceAll函数吗?

    replace.replaceAll.replaceFirst这三个函数会java的同学估计都用过,笔者已经用了2年多,可是,我们真的懂他们吗? 概述一下他们三个的用法: · replace(Char ...

  7. 如何在 ASP.NET MVC 中集成 AngularJS(3)

    今天来为大家介绍如何在 ASP.NET MVC 中集成 AngularJS 的最后一部分内容. 调试路由表 - HTML 缓存清除 就在我以为示例应用程序完成之后,我意识到,我必须提供两个版本的路由表 ...

  8. C语言 · 出现次数最多的数

    问题描述 编写一个程序,读入一组整数,这组整数是按照从小到大的顺序排列的,它们的个数N也是由用户输入的,最多不会超过20.然后程序将对这个数组进行统计,把出现次数最多的那个数组元素值打印出来.如果有两 ...

  9. 2013 duilib入门简明教程 -- XML配置界面(6)

        前面那些教程都是为了让小伙伴们从win32.MFC过渡到duilib,让大家觉得duilib不是那么陌生,如果大家现在还对duilib非常陌生的话,那就说明前面的教程做得不好,请大家在下面留言 ...

  10. eclipse中的javac命令与java命令

    一.eclipse的javac命令:当eclipse对.java(源文件)文件进行保存操作时(快捷键ctrl+s),会执行javac命令.见上图,Default output folder(默认输出文 ...