NSPredicate类的使用
来源:互联网 发布:算法导论有第四版吗? 编辑:程序博客网 时间:2024/06/06 12:53
NSPredicate这个类有点类似于数据库中的查询,是用于在一批内容中查询符合条件的子集,中文翻译成“谓词”。这个翻译实在让我感觉很别扭,虽然明知道和谓语这个词语没什么关系,但确实总让我感觉这是一个句子里面的成分。
我们有些时候会有一个对象的数组或者集合,然后希望从里面找出符合条件的集合,类似于做一次过滤操作。比如我有一批照片,希望能找出所有某一天里面拍摄的内容。
NSPredicate类的创建往往使用predicateWithFormat的方法,这个方法的使用有点类似于stringWithFormat方法。
比如:我们想从一个目录下所有的文件中找出Default.png文件,那么
NSPredicate *predicate;
predicate = [NSPredicate predicateWithFormat: @"name == 'Default.png ' "];
这个谓词字符串看上去象标准的C表达式,左侧的name是键路径,随后的==是运算符,右侧是一个引用字符串。生成了谓词之后,如果你有一个对象希望判断一下是否符合条件,则使用evaluateWithObject方法
BOOL match = [predicate evaluateWithObject: file];
谓词最根本的功能就是这样,判定一个对象是否符合某个过滤条件,返回总是一个BOOL类型。如果你有一系列的对象,那么就做一个的循环即可。
当然,iOS的NSPredicate如果就这些功能,那么未免弱了点,有失顶级平台的风范。这个类有一系列的扩充:
1. 比较和逻辑运算符
就像前面的例子中使用了==操作符,NSPredicate还支持>, >=, <, <=, !=, <>,还支持AND, OR, NOT(或写成C语言样式&&, ||, ! ),其中AND,OR,NOT还是不区分大小写的
2. SELF和LIKE
请注意,这个并非iOS里面的self那个保留字。为什么会引入SELF这个东西呢?是因为不可能每次写谓词都有那么明确的键路径好用,而这个SELF可以引用用于谓词计算的对象。
LIKE运算符是用于通配符的支持,这个通配符就是?和*,这两个通配符应该是很熟悉的了。
有了这两个利器后,写谓词也是方便许多,比如我想匹配所有D打头的png文件,那么就是写
NSString *match = @"D*.png";
[NSPredicate predicateWithFormat:@"SELF LIKE %@", match];
3. 格式化
这个在上面的例子中已经出现了,支持格式化可以进一步提高编码的灵活度。
4. 正则表达式
谓词的表达式还支持正则表达式,记得我看见这个时都有点吃惊了。这样的话这个谓词的灵活可谓到了极致,如果写的比较好的话,可以实现相当复杂的过滤功能。
NSPredicate给我留下最深印象的是两个数组求交集的一个需求,如果按照一般写法,需要2个遍历,但NSArray提供了一个filterUsingPredicate的方法,用了NSPredicate,就可以不用遍历!
NSArray *array1 = [NSArray arrayWithObjects:@"abc1", @"abc2", nil];
NSArray *array2 = [NSArray arrayWithObjects:@"a1", @"abc1", @"abc4", @"abc2", nil];
NSPredicate *thePredicate = [NSPredicate predicateWithFormat:@"SELF in %@", array1];
[array2 filterUsingPredicate:thePredicate];
当你想从一批对象中过滤出一些内容时,请一定要记得NSPredicate这个东东哦
- NSPredicate类的使用
- NSPredicate类的使用
- iOS NSPredicate类的使用
- NSPredicate的使用
- NSPredicate的使用方式
- NSPredicate的使用
- 谓词(NSPredicate)的使用
- NSPredicate的使用
- NSPredicate的使用
- NSPredicate的使用
- NSPredicate的使用
- NSPredicate的使用
- NSPredicate 的使用总结
- NSPredicate 的使用(持续更新)
- 关于谓词NSPredicate的使用
- NSPredicate的用法使用情况
- 谓词技术的使用 NSPredicate
- 谓词的使用(NSPredicate)
- Android多媒体开发【5】-- Stagefright原来是个皮包公司
- JSF标签之f:facet 的使用方法
- poj 4001:抓住那头牛
- 缓存与预加载技术(图片缓存CCSpriteFrameCache、动画缓存 CCAnimationCache、纹理缓存CCTextureCache、音乐音效SimpleAudioEngine)
- SQL 快速参考
- NSPredicate类的使用
- linux设备驱动开发-设备阻塞访问的简单实现
- IOS总结_获取当前的日期,时间,星期几
- 集http上传下载、sqlite的orm框架等实用功能的快速开发框架Afinal
- Android中自定义样式与View的构造函数中的第三个参数defStyle的意义
- C# 遍历文件夹
- 怎么得到优酷网mp4格式视频文件url
- 启动错误
- strtok和strtok_r