nspredicate谓词查询

上传人:第*** 文档编号:31078900 上传时间:2018-02-04 格式:DOCX 页数:10 大小:126.39KB
返回 下载 相关 举报
nspredicate谓词查询_第1页
第1页 / 共10页
nspredicate谓词查询_第2页
第2页 / 共10页
nspredicate谓词查询_第3页
第3页 / 共10页
nspredicate谓词查询_第4页
第4页 / 共10页
nspredicate谓词查询_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《nspredicate谓词查询》由会员分享,可在线阅读,更多相关《nspredicate谓词查询(10页珍藏版)》请在金锄头文库上搜索。

1、 谓词:在计算机语言的环境下,谓词是指条件表达式的求值返回真或假的过程。 Cocoa框架中的NSPredicate用于查询,原理和用法都类似于SQL中的where,作用相当于数据库的过滤器。 根据条件查询name = 德玛 NSString *sqlString = select * from Student where name = 德玛; sqlite3_prepare(db, sqlString.UTF8String, -1, &stmt, NULL) 在没有用这个类时,我们要获取两个数组中某些特定的元素时,需要写代码一一对比,但是使用了这个类,只需要三四行代码就够了。 在iOS开发中,

2、系统提供了NSPredicate 这个类给我们进行一些匹配、筛选操作,非常方便。创建了6个学生,并初始化,存放到数组中 Student *stu1 = Student studentWithName:li age:8 gender:nan; Student *stu2 = Student studentWithName:li age:10 gender:nv; Student *stu3 = Student studentWithName:wang age:12 gender:nan; Student *stu4 = Student studentWithName:wang age:14 ge

3、nder:nan; Student *stu5 = Student studentWithName:zhang age:16 gender:nv; Student *stu6 = Student studentWithName:zhang age:18 gender:nan; Student *stu7 = Student studentWithName:zhao age:20 gender:nv; Student *stu8 = Student studentWithName:zhao age:22 gender:nan; Student *stu9 = Student studentWit

4、hName:sun age:24 gender:nv; Student *stu10 = Student studentWithName:sun age:26 gender:nan; NSArray *studentAry = stu1,stu2,stu3,stu4,stu5,stu6,stu7,stu8,stu9,stu10; 在不使用NSPredicate这个类的时候,要获取数组中学生姓名是li的人,我们这样做 NSMutableArray *liAry = NSMutableArray array; for (Student *student in studentAry) if (stu

5、dent.name isEqualToString:li) liAry addObject:student; NSLog(姓名是li%,liAry); 在不使用NSPredicate这个类的时候,要获取数组中学生姓名以z开头的人,我们这样做 NSMutableArray *zAry = NSMutableArray array; for (Student *student in studentAry) NSString *name = student.name; NSString *firstLetter = name substringToIndex:1; if (firstLetter i

6、sEqualToString:z) zAry addObject:student; NSLog(姓名以z开头%,zAry); 在不使用NSPredicate这个类的时候,要获取数组中学生姓名以g结尾的人,我们这样做 NSMutableArray *gAry = NSMutableArray array; for (Student *student in studentAry) NSString *name = student.name; NSString *lastLetter = name substringFromIndex:name.length - 1; if (lastLetter

7、isEqualToString:i) gAry addObject:student; NSLog(姓名以g结尾%,gAry); 在不使用NSPredicate这个类的时候,要获取数组中学生姓名包含a的人,我们这样做 NSMutableArray *aAry = NSMutableArray array; for (Student *student in studentAry) NSString *name = student.name; for (int i = 0; i *)sortedArrayUsingDescriptors:(NSArray *)sortDescriptors; - (

8、void)sortUsingDescriptors:(NSArray *)sortDescriptors; - (NSArray *)sortedArrayUsingSelector:(SEL)comparator; - (void)sortUsingSelector:(SEL)comparator; 谓词语句的执行对象是集合的时候 interface NSArray (NSPredicateSupport) - (NSArray *)filteredArrayUsingPredicate:(NSPredicate *)predicate; end interface NSMutableArr

9、ay (NSPredicateSupport) - (void)filterUsingPredicate:(NSPredicate *)predicate; end 谓词语句的执行对象是对象的时候 - (BOOL)evaluateWithObject:(nullable id)object; / evaluate a predicate against a single object 和字符串相关的 NSPredicate *predicate2 = NSPredicate predicateWithFormat:self.name CONTAINS %,li; NSLog(姓名中包含li 字

10、符串%,studentAry filteredArrayUsingPredicate:predicate2); NSPredicate *predicate3 = NSPredicate predicateWithFormat:name BEGINSWITH %,z; NSLog(姓名以小写z开头%,studentAry filteredArrayUsingPredicate:predicate3); NSPredicate *predicate4 = NSPredicate predicateWithFormat:name ENDSWITH %,g; NSLog(姓名以小写g结尾%,stud

11、entAry filteredArrayUsingPredicate:predicate4); NSPredicate *predicate5 = NSPredicate predicateWithFormat:self.name = %,li; NSLog(姓名等于字符串li%,studentAry filteredArrayUsingPredicate:predicate5); 注:c不区分大小写 d不区分发音符号即没有重音符号 cd既不区分大小写,也不区分发音符号。 范围运算符 BETWEEN ,IN NSPredicate *predicate6 = NSPredicate predi

12、cateWithFormat:age BETWEEN18,30; NSLog(%,studentAry filteredArrayUsingPredicate:predicate6); NSPredicate *predicate7 = NSPredicate predicateWithFormat:age IN18,30,25; NSLog(%,studentAry filteredArrayUsingPredicate:predicate7); 比较运算符 = %d,10,20; NSLog(年龄小于15岁或者大于20岁的 %,studentAry filteredArrayUsingPr

13、edicate:preciate10); NSPredicate *preciate11 = NSPredicate predicateWithFormat:name BEGINSWITH % NSLog(年龄小于15岁或者大于20岁的 %,studentAry filteredArrayUsingPredicate:preciate11); NSPredicate *preciate12 = NSPredicate predicateWithFormat:age != %d,20; NSLog(年龄小于15岁或者大于20岁的 %,studentAry filteredArrayUsingPr

14、edicate:preciate12); 通配符 *代表通配符是任意个任意字符的意思,?代表一个任意字符 (like 像,如同的意思) NSPredicate *predicate10 = NSPredicate predicateWithFormat:name like *h*; NSLog(%,studentAry filteredArrayUsingPredicate:predicate10); NSPredicate *predicate11 = NSPredicate predicateWithFormat:name like ?n*; NSLog(%,studentAry filt

15、eredArrayUsingPredicate:predicate11); 正则表达式 z|g 代表一个字符,z或者g z 代表以 z开头 g$ 代表以g结尾 z* 代表 z可以出现零次或多次 ,和0, z+ 代表z可以出现一次或多次,和1, z? 代表z可以出现零次或一次,和z0,1 等价 zn 代表z出现n次 zn, 代表z出现至少n次 zn,m 代表z 出现至少n次,最多m次 . 代表除n以外的任何单个字符 xyz 代表 xyz中个任意一个字符 xyz 代表除了 xyz三个字符外的任意字符 a-z 代表小写a到 z之间任意字符 0-9 代表小写0到9之间任意字符 A-Z 代表小写 A到Z之间任意字符 a-z 代表除a到z 之间任意字符 要是仅仅想使用限定符作为一个字符,而不是作为限定符来使用就在前面加 正则

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号