我是前言
NSPredicate是一个Foundation类,它指定数据被获取或者过滤的方式。它的查询语言就像SQL的WHERE和正则表达式的交叉一样,提供了具有表现力的,自然语言界面来定义一个集合被搜寻的逻辑条件。
谓词的基本用法我相信大家也都知道,网上也有很多的帖子分享了关于谓词的使用,下面是关于过滤存储复杂对象数组的谓词用法。
使用谓词过滤两个存储复杂对象数组的方法
直接上代码
首先定义一个person 类 (可能命名有一些不规范…还请不要在意这些细节)
1 | #import <Foundation/Foundation.h> |
在视图控制器(例子中是放在VC中的)中初始化一些person对象 ,
1 | person *a1 = [person personWithNum:@"1" name:@"我0"]; |
接下来就是重点了 , 不啰嗦,直接上代码 。
1 | //使用第一个数组 来过滤 第二个数组 SELF.num IN %@.num 判断两个数组中 如果有 对象 num 相同的 就 保存到 result 数组中。 |
当然结果就是 array1 和 array2 中 num相同的对象 会存储在 result数组中
这里只是一个小小的demo,一个思路,希望能对有需要的人提供帮助.
谓词语法
替换
1.%@是对值为字符串,数字或者日期的对象的替换值。
2.%K是key path的替换值。
1 |
|
基本比较
1.=, ==:左边的表达式和右边的表达式相等。
2.>=, =>:左边的表达式大于或者等于右边的表达式。
3.<=, =<:左边的表达式小于等于右边的表达式
4.>:左边的表达式大于右边的表达式。
5.<:左边的表达式小于右边的表达式。
6.!=, <>:左边的表达式不等于右边的表达式。
7.BETWEEN:左边的表达式等于右边的表达式的值或者介于它们之间。右边是一个有两个指定上限和下限的数值的数列(指定顺序的数列)。比如,1 BETWEEN { 0 , 33 },或者$INPUT BETWEEN { $LOWER, $UPPER }。
基本复合谓词
1.AND, &&:逻辑与.
2.OR, ||:逻辑或.
3.NOT, !:逻辑非.
字符串比较
字符串比较在默认的情况下是区分大小写和音调的。你可以在方括号中用关键字符c和d来修改操作符以相应的指定不区分大小写和变音符号,比如firstname BEGINSWITH[cd] $FIRST_NAME。
1.BEGINSWITH:左边的表达式以右边的表达式作为开始。
2.CONTAINS:左边的表达式包含右边的表达式。
3.ENDSWITH:左边的表达式以右边的表达式作为结束。
4.LIKE:左边的表达式等于右边的表达式:?和可作为通配符,其中?匹配1个字符,匹配0个或者多个字符。
5.MATCHES:左边的表达式根据ICU v3(更多内容请查看ICU User Guide for Regular Expressions)的regex风格比较,等于右边的表达式。
合计操作
关系操作
1.ANY,SOME:指定下列表达式中的任意元素。比如,ANY children.age < 18。
2.ALL:指定下列表达式中的所有元素。比如,ALL children.age < 18。
3.NONE:指定下列表达式中没有的元素。比如,NONE children.age < 18。它在逻辑上等于NOT (ANY …)。
4.IN:等于SQL的IN操作,左边的表达必须出现在右边指定的集合中。比如,name IN { ‘Ben’, ‘Melissa’, ‘Nick’ }。
数组操作
1.array[index]:指定数组中特定索引处的元素。
2.array[FIRST]:指定数组中的第一个元素。
3.array[LAST]:指定数组中的最后一个元素。
4.array[SIZE]:指定数组的大小
这是结束语 (壮士,来一碗鸡汤吧)
越是黑暗时,越不能熄灭生命的灯盏,越要点亮人生的光芒。