NSPredicate实现数据筛选
一:基本语法
1.什么是NSPredicate apple官方文档这样写的: The NSPredicate class is used to define logical conditions used to constrain a search either for a fetch or for in-memory filtering. (NSPredicate类是通过定义逻辑条件来约束获取或内存中的过滤搜索。)
2.基本语法 (大小写都可以,但是更推荐使用大写来表示这些保留字) 只要我们使用谓词(NSPredicate)都需要为谓词定义谓词表达式,而这个表达式必须是一个返回BOOL的值。 谓词表达式由表达式、运算符和值构成。如 SELF = 123
(1) 比较运算符 = 和 == 没有赋值一说 都是判断是否相等
(2) >= <= > < != <> 除此之外还有BETWEEN判定是否在之间
/* 符合条件之间范围的值 SELF>1 && SELF<10
OR | 逻辑或 有一个满足就输出 |
NOT ! 逻辑非 取反
*/
// between
int testNumber = ; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF BETWEEN {1, 10}"]; if ([predicate evaluateWithObject:[NSNumber numberWithInteger:testNumber]]) { NSLog(@"testString:%d", testNumber); } else { NSLog(@"不符合条件"); }
(3)字符串比较运算符
BEGINWITH 检查某字符是否以指定的字符串开头
eg: 是否以a开头 则为 BEGINSWITH ‘a’
ENDSWITH 以()为结尾
CONTAINS 是否包含
LIKE 检查某个字符串是否匹配指定的字符串模板, 其之后可以跟?和两个通 配符 (?代表一个字符 代表任意多个字符)
eg: "name LIKE'?ac*'" 表示name的第2 3个字符是ac则返回YES
"name LIKE'*ac*'" 表示name包含ac则返回YES
MATCHES 检查某个字符串是否匹配指定的正则表达式
(4)集合运算符
ANY、SOME:集合中任意一个元素满足条件,就返回YES。
ALL:集合中所有元素都满足条件,才返回YES。
NONE:集合中没有任何元素满足条件就返回YES。如:NONE person.age < 18,表示person集合中所有元素的age>=18时,才返回YES。
IN:等价于SQL语句中的IN运算符,只有当左边表达式或值出现在右边的集合中才会返回YES。
array[index]:返回array数组中index索引处的元素
array[FIRST]:返回array数组中第一个元素
array[LAST]:返回array数组中最后一个元素
array[SIZE]:返回array数组中元素的个数
二、NSPredicate 的用法
(1) 定义谓词
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF BETWEEN {1, 10}"];
(2)(重难点模块)使用谓词过滤集合
此部分是我们需要掌握的重点,因为从这里我们就可以看到谓词的真正的强大之处
其实谓词本身就代表了一个逻辑条件,计算谓词之后返回的结果永远为BOOL类型的值。而谓词最常用的功能就是对集合进行过滤。
********重点**********
当程序使用谓词对集合元素进行过滤时,程序会自动遍历其元素,并根据集合元素来计算谓词的值,当这个集合中的元素计算谓词并返回YES时,这个元素才会被保留下来。
***********************
ps:请注意程序会自动遍历其元素,它会将自动遍历过之后返回为YES的值重新组合成一个集合返回。
NSArray提供了如下方法使用谓词来过滤集合
- (NSArray<ObjectType> *)filteredArrayUsingPredicate:(NSPredicate *)predicate:使用指定的谓词过滤NSArray集合,返回符合条件的元素组成的新集合
NSMutableArray提供了如下方法使用谓词来过滤集合
- (void)filterUsingPredicate:(NSPredicate *)predicate:使用指定的谓词过滤NSMutableArray,剔除集合中不符合条件的元素
NSSet提供了如下方法使用谓词来过滤集合
- (NSSet<ObjectType> *)filteredSetUsingPredicate:(NSPredicate *)predicate NS_AVAILABLE(10_5, 3_0):作用同NSArray中的方法
NSMutableSet提供了如下方法使用谓词来过滤集合
-(void)filterUsingPredicate:(NSPredicate *)predicate NS_AVAILABLE(10_5, 3_0):作用同NSMutableArray中的方法。
通过上面的描述可以看出,使用谓词过滤不可变集合和可变集合的区别是:过滤不可变集合时,会返回符合条件的集合元素组成的新集合;过滤可变集合时,没有返回值,会直接剔除不符合条件的集合元素
NSPredicate实现数据筛选的更多相关文章
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(81)-数据筛选(万能查询)
系列目录 前言 听标题的名字似乎是一个非常牛X复杂的功能,但是实际上它确实是非常复杂的,我们本节将演示如何实现对数据,进行组合查询(数据筛选) 我们都知道Excel中是如何筛选数据的.就像下面一样 他 ...
- DataGridView如何实现列标头带数据筛选功能,就象Excel高级筛选功能一样
'近日有本论坛网友问:DataGridView如何实现列标头带数据筛选功能,就象Excel高级筛选功能一样 '今晚正好闲着没事,加之以前也没用到过这个需求,所以就写了个模拟功能,供各位坛友酌情参考. ...
- layui table 根据条件改变更换表格颜色 高亮显示 数据筛选
请问想让当layui表格的某个字段符合某个条件的时候,让该行变颜色.这样可以实现么. layui数据表格怎么更换表格颜色 layui表格 通过判断某一行中的某一列的值进行设置这一行的颜色 LayUI之 ...
- C#进行数据筛选(二)
这里介绍LINQ+Lambda表达式进行数据筛选的方式 这里是第一种方式,还是使用了if条件语句去判断,根据选择的条件去筛选出我所需要的数据 public GxAnaly SelectDay(stri ...
- C#进行数据筛选(一)
这里介绍数据筛选的第一种方式,不用过滤器,给新手看得 public DataTable SourceList(string Wmain, string OrderNo, string Process) ...
- python之pandas数据筛选和csv操作
本博主要总结DaraFrame数据筛选方法(loc,iloc,ix,at,iat),并以操作csv文件为例进行说明 1. 数据筛选 a b c (1)单条件筛选 df[df[] # 如果想筛选a列的取 ...
- Pandas 数据筛选,去重结合group by
Pandas 数据筛选,去重结合group by 需求 今小伙伴有一个Excel表, 是部门里的小伙9月份打卡记录, 关键字段如下: 姓名, 工号, 日期, 打卡方式, 时间, 详细位置, IP地址. ...
- 【杂记】mysql 左右连接查询中的NULL的数据筛选问题,查询NULL设置默认值,DATE_FORMAT函数
MySQL左右连接查询中的NULL的数据筛选问题 xpression 为 Null,则 IsNull 将返回 True:否则 IsNull 将返回 False. 如果 expression 由多个变量 ...
- 4-Pandas之数据类型与数据筛选
一.数据类型 1.Pandas的数据类型主要结合了pandas和numpy两个模块中的数据类型,包括以下几种: float int bool datetime64[ns]------>日期类型 ...
随机推荐
- Spring mvc mybatis 查询结果缺少字段 解决方法
参考:https://blog.csdn.net/xiaofeifei8421/article/details/43231815
- 修改DUILIB任务栏中显示的图标和EXE图标
在资源中添加ICO图标,获取属性名,在主窗口文件中的函数InitWindow或OnCreate中添加如下代码: SetIcon(IDR_MAINFRAME); 修改EXE显示图标,在主窗口中加入如下代 ...
- Js 获取当前日期时间及其它操作(转)
Js获取当前日期时间及其它操作 var myDate = new Date();myDate.getYear(); //获取当前年份(2位)myDate.getFullYear(); ...
- Linux centosVMware MySQL主从介绍、准备工作、配置主、配置从、测试主从同步
一.MySQL主从介绍 MySQL主从又叫做Replication.AB复制.简单讲就是A和B两台机器做主从后,在A上写数据,另外一台B也会跟着写数据,两者数据实时同步的 MySQL主从是基于binl ...
- Android反编译与防止反编译
1.Android反编译 1)下载两个工具 dex2jar,jar2java,相关阅读下载见:http://www.linuxidc.com/Linux/2011-02/32775.htm ...
- 一个自己实现的Vector(只能处理基本类型数据)
一个自己实现的Vector(只能处理基本类型数据) string 类型不行 bool char* int double float long long 等基本s类型可用 使用模板类实现.底层为数组实现 ...
- Java核心API需要掌握的程度
分类: java技术2009-08-29 01:03 213人阅读 评论(0) 收藏 举报 javaapiswingxmlio Java的核心API是非常庞大的,这给开发者来说带来了很大的方便,经常人 ...
- leetcode322 Coin Change
""" You are given coins of different denominations and a total amount of money amount ...
- delphi窗体按钮灰化禁用
1.使最小化按钮变灰:setwindowlong(handle,gwl_style,getwindowlong(handle,gwl_style) and not ws_minimizeb ...
- POJ 2386 Lake Counting 八方向棋盘搜索
Lake Counting Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 53301 Accepted: 26062 D ...