NSPredicate謂詞查詢_第1頁(yè)
NSPredicate謂詞查詢_第2頁(yè)
NSPredicate謂詞查詢_第3頁(yè)
NSPredicate謂詞查詢_第4頁(yè)
NSPredicate謂詞查詢_第5頁(yè)
已閱讀5頁(yè),還剩4頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、謂詞:在計(jì)算機(jī)語(yǔ)言的環(huán)境下,謂詞是指條件表達(dá)式的求值返回真或假的過程。 Cocoa框架中的NSPredicate用于查詢,原理和用法都類似于SQL中的where,作用相當(dāng)于數(shù)據(jù)庫(kù)的過濾器。 根據(jù)條件查詢name = 德瑪 NSString *sqlString = select * from Student where name = 德瑪; sqlite3_prepare(db, sqlString.UTF8String, -1, &stmt, NULL) 在沒有用這個(gè)類時(shí),我們要獲取兩個(gè)數(shù)組中某些特定的元素時(shí),需要寫代碼一一對(duì)比,但是使用了這個(gè)類,只需要三四行代碼就夠了。 在iOS開發(fā)中,系

2、統(tǒng)提供了NSPredicate這個(gè)類給我們進(jìn)行一些匹配、篩選操作,非常方便。創(chuàng)建了6個(gè)學(xué)生,并初始化,存放到數(shù)組中 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這個(gè)類的時(shí)候,要獲取數(shù)組中學(xué)生姓名是li的人,我們這樣做 NSMutableArray *liAry = NSMutableArray array; for (Student *student in studentAry) if (stude

5、 isEqualToString:li) liAry addObject:student; NSLog(姓名是li%,liAry); 在不使用NSPredicate這個(gè)類的時(shí)候,要獲取數(shù)組中學(xué)生姓名以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è)類的時(shí)候,要獲取數(shù)組中學(xué)生姓名以g結(jié)尾的人,我們這樣做 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結(jié)尾%,gAry); 在不使用NSPredicate這個(gè)類的時(shí)候,要獲取數(shù)組中學(xué)生姓名包含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這個(gè)類的時(shí)候,要獲取數(shù)組中學(xué)生姓名包含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, 創(chuàng)建一個(gè)謂詞語(yǔ)句 + (NSPr

10、edicate *)predicateWithFormat:(NSString *)predicateFormat, .; 回顧以前的知識(shí) + (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; 謂詞語(yǔ)句的執(zhí)行對(duì)象是集合的時(shí)候 interface NSArray (NSPredicateSupport) - (NSArray *)filteredArrayUsingPredicate:(NSPredicate *)predicate; end interface NSMutableArray (NSPredicateSupport) - (void)filterUsingP

12、redicate:(NSPredicate *)predicate; end 謂詞語(yǔ)句的執(zhí)行對(duì)象是對(duì)象的時(shí)候 - (BOOL)evaluateWithObject:(nullable id)object; / evaluate a predicate against a single object 和字符串相關(guān)的 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結(jié)尾%,studentAry filteredArrayUsingPredicate:predicate4

14、); NSPredicate *predicate5 = NSPredicate predicateWithFormat: = %,li; NSLog(姓名等于字符串li%,studentAry filteredArrayUsingPredicate:predicate5); 注:c不區(qū)分大小寫 d不區(qū)分發(fā)音符號(hào)即沒有重音符號(hào) cd既不區(qū)分大小寫,也不區(qū)分發(fā)音符號(hào)。 范圍運(yùn)算符 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); 比較運(yùn)算符 = = != NSPredicate *predicate8 = NSPredicate predicateWithFormat:age %d,20; NSLog(%,studentAry filteredArrayUsin

16、gPredicate:predicate8); NSPredicate *predicate9 = NSPredicate predicateWithFormat:age = %d,20; NSLog(%,studentAry filteredArrayUsingPredicate:predicate9); 邏輯運(yùn)算符 | & ! 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); 通配符 *代表通配符是任意個(gè)任意字符的意思,?代表一個(gè)任意字符 (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); 正則表達(dá)式 z|g 代表一個(gè)字符,z或者g z 代表以z開頭 g$ 代表以g結(jié)尾 z* 代表z可以出現(xiàn)零次或多次,和0, z+ 代表z可以出現(xiàn)一次或多次,和1, z? 代表z可以出現(xiàn)零次或一次,和z0,1等價(jià) zn 代表z出現(xiàn)n次 zn, 代表z出現(xiàn)至少n次 zn,m 代表z出現(xiàn)至少n次,最多m次 . 代表除n以外的任何單個(gè)字符 xyz 代表xyz中個(gè)任意一個(gè)字符 xyz 代表除了xyz三個(gè)字符外的任意字符 a-z 代表小寫a到z之間任意字符 0-9 代表小寫0到9之間任意字符 A-Z 代表小寫A到Z之間任

20、意字符 a-z 代表除a到z之間任意字符 要是僅僅想使用限定符作為一個(gè)字符,而不是作為限定符來使用就在前面加 正則表達(dá)式 MATCHES /NSString *regex = z.g$; NSString *regex = a-z+; NSPredicate *predicate12 = NSPredicate predicateWithFormat: MATCHES %,regex; NSLog(%,studentAry filteredArrayUsingPredicate:predicate12); 如果數(shù)組中存放的是字符串 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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論