NSPredicate谓词查询_第1页
NSPredicate谓词查询_第2页
NSPredicate谓词查询_第3页
NSPredicate谓词查询_第4页
NSPredicate谓词查询_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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 gend

3、er: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 studentWithN

4、ame: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 (stude

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

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

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

8、e:NSMakeRange(i, 1); if (letter isEqualToString:a) aAry addObject:student; NSLog(%,aAry); 在不使用NSPredicate这个类的时候,要获取数组中学生姓名包含an的人,我们这样做 NSMutableArray *anAry = NSMutableArray array; for (Student *student in studentAry) NSString *name = ; for (int i = 0; i (int)name.length - 1; i+) NSStrin

9、g *nowLetter = name substringWithRange:NSMakeRange(i, 1); NSString *nextLetter = name substringWithRange:NSMakeRange(i + 1, 1); if (nowLetter isEqualToString:a & nextLetter isEqualToString:n) anAry addObject:student; NSLog(%,anAry); 使用NSPredicate,可以替我们省去很多代码 NSPredicate继承自NSObeject, 创建一个谓词语句 + (NSPr

10、edicate *)predicateWithFormat:(NSString *)predicateFormat, .; 回顾以前的知识 + (instancetype)sortDescriptorWithKey:(nullable NSString *)key ascending:(BOOL)ascending NS_AVAILABLE(10_6, 4_0); - (NSArray *)sortedArrayUsingDescriptors:(NSArray *)sortDescriptors; - (void)sortUsingDescriptors:(NSArray *)sortDes

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

12、redicate:(NSPredicate *)predicate; end 谓词语句的执行对象是对象的时候 - (BOOL)evaluateWithObject:(nullable id)object; / evaluate a predicate against a single object 和字符串相关的 NSPredicate *predicate2 = NSPredicate predicateWithFormat: CONTAINS %,li; NSLog(姓名中包含li字符串%,studentAry filteredArrayUsingPredicate:pr

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

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

15、entAry filteredArrayUsingPredicate:predicate6); NSPredicate *predicate7 = NSPredicate predicateWithFormat:age IN18,30,25; NSLog(%,studentAry filteredArrayUsingPredicate:predicate7); 比较运算符 = = != NSPredicate *predicate8 = NSPredicate predicateWithFormat:age %d,20; NSLog(%,studentAry filteredArrayUsin

16、gPredicate:predicate8); NSPredicate *predicate9 = NSPredicate predicateWithFormat:age = %d,20; NSLog(%,studentAry filteredArrayUsingPredicate:predicate9); 逻辑运算符 | & ! NSPredicate *preciate10 = NSPredicate predicateWithFormat:age %d,10,20; NSLog(年龄小于15岁或者大于20岁的%,studentAry filteredArrayUsingPredicate

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

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

19、y filteredArrayUsingPredicate: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之间任

20、意字符 a-z 代表除a到z之间任意字符 要是仅仅想使用限定符作为一个字符,而不是作为限定符来使用就在前面加 正则表达式 MATCHES /NSString *regex = z.g$; NSString *regex = a-z+; NSPredicate *predicate12 = NSPredicate predicateWithFormat: MATCHES %,regex; NSLog(%,studentAry filteredArrayUsingPredicate:predicate12); 如果数组中存放的是字符串 NSArray *ary1 = 12,456789,123789,123963; NSPredicate *predicate1 = NSPredicate predicateWithFormat:self CONTAINS %,123; NSLog(%,ary1 filteredArrayUsingPredicate:predicate1); NSPredicate *predicate111 = NSPredicate predicateWithFormat:self.length = %d,2; NSLog(%,ary1 filteredArrayUsingPredicate:pre

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论