iOS NSPredicate的学习讲解

iOS Predicate 即谓词逻辑。和数据库的SQL语句具有相似性,都是从数据堆中根据条件进行筛选。

1.使用场景:

(1)NSPredicate给我留下最深印象的是两个数组求交集的一个需求,如果按照一般写法,需要2个遍历,但NSArray提供了一个filterUsingPredicate的方法,用了NSPredicate,就可以不用遍历!

(2)在存储自定义对象的数组中,可以根据条件查询数组中满足条件的对象。

2.首先熟悉Predicate:

NSArray *array1 = [NSArray arrayWithObjects:@1,@2,@3,@5,@5,@6,@7, nil];

NSArray *array2 = [NSArray arrayWithObjects:@4,@5, nil];

// 表示筛选array1在array2中的元素!YES!其中SELF指向filteredArrayUsingPredicate的调用者。

/*测试方案:

NSPredicate *predicate1 = [NSPredicate predicateWithFormat:@"SELF  in %@",array2];

NSArray *temp1 = [array1 filteredArrayUsingPredicate:predicate1];

//表示array1在array2中元素

结果:

2015-11-08 10:55:19.879 NSPredicateDemo[11595:166012] obj ==5

2015-11-08 10:55:19.879 NSPredicateDemo[11595:166012] obj ==5

NSPredicate *predicate2 = [NSPredicate predicateWithFormat:@"SELF  in %@",array1];

NSArray *temp1 = [array2 filteredArrayUsingPredicate:predicate1];

结果:

2015-11-08 10:55:19.879 NSPredicateDemo[11595:166012] obj ==5

*/

NSPredicate *predicate1 = [NSPredicate predicateWithFormat:@"SELF  in %@",array2];

NSArray *temp1 = [array1 filteredArrayUsingPredicate:predicate1];

[temp1 enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {

NSLog(@"temp1 = %@",obj);

}];

/*

2015-11-08 10:55:19.879 NSPredicateDemo[11595:166012] obj ==5

2015-11-08 10:55:19.879 NSPredicateDemo[11595:166012] obj ==5

*/

3.基本语法

(1)比较运算符>,<,==,>=,<=,!=

可用于数值及字符串

(2)范围运算符:IN、BETWEEN

例:@"number BETWEEN {1,5}"

@"address IN {‘shanghai‘,‘beijing‘}"

(3)字符串本身:SELF

例:@“SELF == ‘APPLE’"

(4)字符串相关:BEGINSWITH、ENDSWITH、CONTAINS

例:@"name CONTAIN[cd] ‘ang‘"  //包含某个字符串

@"name BEGINSWITH[c] ‘sh‘"    //以某个字符串开头

@"name ENDSWITH[d] ‘ang‘"      //以某个字符串结束

注:[c]不区分大小写[d]不区分发音符号即没有重音符号[cd]既不区分大小写,也不区分发音符号。

(5)通配符:LIKE

例:@"name LIKE[cd] ‘*er*‘"    //*代表通配符,Like也接受[cd].

@"name LIKE[cd] ‘???er*‘"

文/九零猴VS久林(简书作者)
原文链接:http://www.jianshu.com/p/b2694972863e
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

时间: 2024-08-26 01:05:20

iOS NSPredicate的学习讲解的相关文章

关于iOS开发的学习

关于iOS开发的学习,打个比方就像把汽车分解:    最底层的原料有塑料,钢铁    再用这些底层的东西造出来发动机,座椅    最后再加上写螺丝,胶水等,把汽车就拼起来了iOS基本都是英文的资料,也由于封闭,文档写的相当好.在遇到新框架的时候:    弄明白框架的功能    去文档里搜搜 框架的 Programming Guide 很有用    要弄明白框架类的继承结构写iOS的程序不一定都是用OBJC,很多框架是用C写的.学习iOS开发基础可以按照下面两个方面学:    基础 (原料 钢铁 

IOS UITableView NSIndexPath属性讲解

IOS UITableView NSIndexPath属性讲解 查看UITableView的帮助文档我们会注意到UITableView有两个Delegate分别为:dataSource和delegate. dataSource 是UITableViewDataSource类型,主要为UITableView提 供显示用的数据(UITableViewCell),指定UITableViewCell支持的编辑操作类型(insert,delete和 reordering),并根据用户的操作进行相应的数据更

iOS NSString的学习熟悉

对于字符串频繁的切割,合并,插入等操作,优先使用NSMutableString类. 这里讨论的是NSString.然后就是贴代码: 1 -(void)stringDemo{ 2 NSLog(@"____________________________"); 3 4 NSString *string = [[NSString alloc] initWithString:@"Hi,woods!"]; 5 NSLog(@"%@", string); 6

boost::tuple 深入学习讲解

#include<iostream> #include<string> #include<boost/tuple/tuple.hpp> #include<boost/tuple/tuple_io.hpp> #include <boost/tuple/tuple_comparison.hpp> using namespace std; int main(){ //boost::tuple 扩展了 C++ 的数据类型 std::pair 用以储存多个

IOS开发---菜鸟学习之路--(二)-数据获取

http://www.cnblogs.com/PleaseInputEnglish/p/3432024.html IOS开发---菜鸟学习之路--(二)-数据获取,布布扣,bubuko.com

iOS开发如何学习前端(1)

iOS开发如何学习前端(1) 我为何学前端?因为无聊. 概念 前端大概三大块. HTML CSS JavaScript 基本上每个概念在iOS中都有对应的.HTML请想象成只能拉Autolayout或者设置Frame的ViewController.好比你在网页上放了一个Button,如果用HTML你就可以设置他的摆放位置,在哪哪个控件里.但是你不可以设置大小,颜色,圆角之类的属性.CSS专门负责HTML管不了的这些颜色啊,大小啊之类的属性.JavaScript主要负责响应事件,你把它想象成iOS

0811 iOS开发需要学习哪些内容

1.iOS开发需要学习哪些内容? 2.开发步骤 3.框架 为了方便开发者开发出强大的功能,苹果提供了各种各样的框架 [1]UIKit:创建和管理应用程序的用户界面 [2]QuartzCore:提供动画特效以及通过硬件进行渲染的能力 [3]CoreGraphics:提供2D绘制的基于C的API [4]CoreLocation:使用GPS和WIFI获取位置信息 [5]MapKit:为应用程序提供内嵌地图的接口 [6]AVFoundation:音频.视频处理 [7]--

IOS图层Layer学习笔记(二)—— CALayer(上)

IOS图层Layer学习笔记(二)-- CALayer(上) 简介 CALayer是所有图层的基类.主要是一些基本显示属性(位置.锚点.颜色.透明度等).层次关系(子图层和父图层).基本动画等. 接下来分别从常用属性.类方法和实例方法来介绍CALayer的使用.顺序是按头文件的排序来. 常用属性 bounds CGRect,Animatable.控制layer的大小,其中x和y无效果,默认是(0,0). position CGPoint,Animatable.控制layer锚点在父图层的位置.

ios 控制器 modal 学习

5.12 为了给学生改论文,在UPC上登录了Windows 8.1,晚上正常关机.今日切换登陆Ubuntu 14.04分区,发现原来可以正常访问的windows下的NTFS分区都被锁死,提示如下错误: Error mounting /dev/sda2 at /media/love/Mis Archiivos: Command-line `mount -t "ntfs" -o "uhelper=udisks2,nodev,nosuid,uid=1000,gid=1000,dma