




版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年教育游戲化在特殊兒童教育中的應(yīng)用策略報(bào)告001
- 飲料行業(yè)新型甜味劑法規(guī)監(jiān)管對(duì)產(chǎn)品品質(zhì)控制的影響報(bào)告
- 血沉比對(duì)分析報(bào)告表
- 房屋商品房銷售合同-合同范本模板
- 2025-2030中國(guó)鄰硝基苯磺酰氯行業(yè)供需態(tài)勢(shì)及投資前景預(yù)測(cè)報(bào)告
- 創(chuàng)傷性腦損傷的顱外并發(fā)癥2025
- 2025-2030中國(guó)蠔肉行業(yè)競(jìng)爭(zhēng)狀況與消費(fèi)趨勢(shì)預(yù)測(cè)報(bào)告
- 2025-2030中國(guó)自助售貨機(jī)行業(yè)營(yíng)銷態(tài)勢(shì)及經(jīng)營(yíng)效益預(yù)測(cè)報(bào)告
- 化學(xué)礦園區(qū)基礎(chǔ)設(shè)施建設(shè)標(biāo)準(zhǔn)考核試卷
- 科技項(xiàng)目實(shí)踐中的創(chuàng)新成果展示考核試卷
- 2025年廣東省廣州市越秀區(qū)第十六中學(xué)中考二模數(shù)學(xué)試卷(含部分答案)
- 2025年湖南省中考語(yǔ)文試卷真題及答案詳解(精校打印版)
- 2025年湖北省高考政治試卷真題(含答案解析)
- 供電施工安全培訓(xùn)課件
- 北京市西城區(qū)2023-2024學(xué)年六年級(jí)下學(xué)期數(shù)學(xué)期末檢測(cè)試卷(含答案)
- 2024年北京東城區(qū)中考地理試卷真題及答案詳解
- 發(fā)動(dòng)機(jī)質(zhì)保協(xié)議書合同
- 2025年中國(guó)建筑鋼結(jié)構(gòu)產(chǎn)品市場(chǎng)調(diào)查研究報(bào)告
- DB31T 1201-2019 老年照護(hù)統(tǒng)一需求評(píng)估規(guī)范
- 云南省昆明市 2022-2023學(xué)年高一下學(xué)期期末英語(yǔ)試題(含答案)
- 診所合伙投資協(xié)議書
評(píng)論
0/150
提交評(píng)論