iOS:轉載:IOS謂詞--NSPredicate

IOS謂詞--NSPredicate?

分類:?IOS應用

Cocoa 提供了NSPredicate 用于指定過濾條件,謂詞是指在計算機中表示計算真假值的函數,
它使用起來有點兒像SQL 的查詢條件,主要用于從集合中分揀出符合條件的對象,也可以
用于字符串的正則匹配。首先我們看一個非常簡單的例子,對謂詞有一個認知。
#import <Foundation/Foundation.h>
@interface Person: NSObject{
int pid;
NSString *name;
float height;
}
-(void) setPid: (int) pid;
-(void) setName: (NSString*) name;
-(void) setHeight: (float) height;
-(int) pid;
-(NSString*) name;
-(float) height;
@end
@implementation Person
-(void) setPid: (int) p{
pid=p;
}
-(void) setName: (NSString*) n{
[n retain];
[name release];
name=n;
}
-(void) setHeight: (float) h{
height=h;
}
-(int) pid{
return pid;
}
-(NSString*) name{
return name;
}
-(float) height{
return height;
}
-(void) dealloc{
[name release];
[super dealloc];
}
@end
int main (int argc , const char * argv[]){
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
//實例化三個Person,并放入數組。
NSMutableArray *array=[NSMutableArray arrayWithCapacity: 5];
Person *person1=[[Person alloc] init];
[person1 setPid: 1];
[person1 setName: @"Name1"];
[person1 setHeight: 168];
[array addObject: person1];
Person *person2=[[Person alloc] init];
[person2 setPid: 2];
[person2 setName: @"Name2"];
[person2 setHeight: 178];
[array addObject: person2];
Person *person3=[[Person alloc] init];
[person3 setPid: 3];
[person3 setName: @"Name3"];
[person3 setHeight: 188];
[array addObject: person3];
//創建謂詞,條件是pid>1 并且height<188.0。其實謂詞也是基于KVC 的,也就是如
果pid 在person 的成員變量xxx 中,那么此處要寫成xxx.pid>1。
NSPredicate *pre = [NSPredicate predicateWithFormat:
@" pid>1 and height<188.0"];
int i=0;
for(;i<[array count];i++){
Person *person=[array objectAtIndex: i];
//遍歷數組,輸出符合謂詞條件的Person 的name。
if ([pre evaluateWithObject: person]) {
NSLog(@"%@",[person name]);
}
}
[person1 release];
[person2 release];
[person3 release];
[pool release];
return 0;
}
Shell 窗口輸出如下所示:
2011-04-01 16:51:18.382 Predicate[2400] Name2
我們看到創建謂詞使用類方法predicateWithFormat: (NSString*) format,format 里的東西真的
和SQL 的where 條件差不多。另外,參數format 與NSLog 的格式化模版差不多,如果1 和
188.0 是傳遞過來的參數,你可以寫成如下的形式:
@"pid>%d and height<%f",1,188.0
(1.) 邏輯運算符:AND、OR、NOT
這幾個運算符計算并、或、非的結果。
(2.) 范圍運算符:BETWEEN、IN
例:
@”pid BETWEEN {1,5}”
@"name IN {'Name1','Name2'}"
(3.) 占位符:
NSPredicate *preTemplate = [NSPredicate predicateWithFormat:@"name==$NAME"];
NSDictionary *dic=[NSDictionary dictionaryWithObjectsAndKeys:
@"Name1", @"NAME",nil];
NSPredicate *pre=[preTemplate predicateWithSubstitutionVariables: dic];
占位符就是字段對象里的key,因此你可以有多個占位符,只要key 不一樣就可以了。
(4.) 快速篩選數組:
前面我們都是使用謂詞逐個判斷數組內的對象是否符合,其實數組本身有更為便捷的方法,
直接篩選出一個符合謂詞的新數組。
NSPredicate *pre = [NSPredicate predicateWithFormat:@"pid>1"];
NSMutableArray *arrayPre=[array filteredArrayUsingPredicate: pre];
NSLog(@"%@",[[arrayPre objectAtIndex: 0] name]);
(5.) 字符串運算符:
BEGINSWITH、ENDSWITH、CONTAINS 分別表示是否以某字符串開頭、結尾、包含。
他們可以與c、d 連用,表示是否忽略大小寫、是否忽略重音字母(字母上方有聲調標號)。
例:
@”name BEGINSWITH[cd] ‘He’”
判斷name 是否以He 開頭,并且忽略大小寫、忽略重音字母。
(6.) LIKE 運算符:
LIKE 使用?表示一個字符,*表示多個字符,也可以與c、d 連用。
例:
@”name LIKE ‘???er*’” 與Paper Plane 相匹配。
(7.) SELF:
前面的數組中放的都是對象,如果數組放的都是字符串(或者是其他沒有屬性的類型),該
怎么寫謂詞呢?這里我們使用SELF。
例:
NSArray *arrays=[NSArray arrayWithObjects: @"Apple", @"Google", @"MircoSoft", nil];
NSPredicate *pre2 = [NSPredicate predicateWithFormat:@"SELF=='Apple'"];
(8.) 正則表達式:
NSPredicate 使用MATCHES 匹配正則表達式,正則表達式的寫法采用international components
for Unicode (ICU)的正則語法。
例:
NSString *regex = @"^A.+e$";//以A 開頭,以e 結尾的字符。
NSPredicate *pre= [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
if([pre evaluateWithObject: @"Apple"]){
printf("YES\n");
}else{
printf("NO\n");
}

?

?

?








?

?

?














































?


























































?




















轉載于:https://www.cnblogs.com/XYQ-208910/p/4823178.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/258315.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/258315.shtml
英文地址,請注明出處:http://en.pswp.cn/news/258315.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

cordova 更改app版本_Cordova打包Android應用流程(MAC)

擴展閱讀基于Cordova批量打場景包(MAC)APP包名稱命名規則1. 安裝cordova打包應用brew install cordova2. 創建cordova項目執行命令 create app com.githen.app 測試app * app 項目的目錄名稱 ( 下面所有目錄均以此目錄為根目錄說明 ) * com.githen.app 項目包名稱 * 測試app 項…

二級Python 第三方庫

?\color{salmon}\clubsuit? 本文總結了二級Python中經常考察的一些第三方庫的功能和分類&#xff0c;做到一半發現39&#xff0c;40知識點基本固定&#xff0c;突發奇想做個總結&#xff0c;有缺的話應該是前幾套 功能用途第三方庫數據可視化mayavi TVTK matplotlib vispy g…

深入理解Elasticsearch(原書第2版)》一1.2 何為Elasticsearch

本節書摘來華章計算機《深入理解Elasticsearch&#xff08;原書第2版&#xff09;》一書中的第1章 &#xff0c;第1.2節&#xff0c;[美]拉斐爾酷奇&#xff08;Rafal Ku&#xff09; 馬雷克羅戈任斯基&#xff08;Marek Rogoziski&#xff09;著 張世武 余洪淼 商旦 譯 更…

深搜——數字劃分問題

TYVJ 1271 零式求和 描述 請考慮一個由1到N&#xff08;N3, 4, 5 ... 9&#xff09;的數字組成的遞增數列&#xff1a;1 2 3 ... N。現在請在數列中插入“”表示加&#xff0c;或者“-”表示減&#xff0c;抑或是“ ”表示空白(例如1-2 3就等于1-23)&#xff0c;來將每一對數字…

正交解調原理

雷達系統發射和接收的脈沖是實信號。本文解釋了如何通過正交解調對接收信號進行頻帶搬移&#xff0c;從而獲得一個復的基帶信號。 ?一般具有較高載頻的低頻調制實信號表示如下&#xff1a; x(τ)cos[2πf0τ?(τ)](1)x(\tau)cos[2\pi f_0\tau\phi(\tau)]\tag{1} x(τ)cos[2π…

修改windows系統下xampp中apache端口被其他程式占用的問題

windows 7安裝後啟動xampp, 提示port 443 被其他程式占用。 網上查找解決方案: http://stackoverflow.com/questions/21182512/how-to-stop-vmware-port-error-of-443-on-xampp-control-panel-v3-2-1 * Open up httpd-ssl.conf in path2xampp\apache\conf\extra * Look for the…

channelinactive觸發后不關閉channel_go那些事兒|channel使用及其實現原理

目錄 channel背景channel基本用法channel應用場景channel實現原理channel數據結構channel實現方式channel注意事項閑聊歡迎加入我的公眾號【邁莫coding】 一起pk大廠1channel背景channel是Go的核心類型&#xff0c;是Go語言內置的類型&#xff0c;你無需引包&#xff0c;就能使…

遞推-練習2--noi3525:上臺階

遞推-練習2--noi3525:上臺階 一、心得 二、題目 3525:上臺階 總時間限制: 1000ms內存限制: 65536kB描述樓梯有n(100 > n > 0)階臺階,上樓時可以一步上1階,也可以一步上2階,也可以一步上3階&#xff0c;編程計算共有多少種不同的走法。 輸入輸入的每一行包括一組測試數據&…

matlab畫信號頻譜

為了讓大學生活充實一點&#xff0c;多學點東西&#xff0c;我選修了《數字信號處理》。現在充實得不要不要的。 clc close all clear%參數設置% Fs 1000; % Sampling frequency T 1/Fs; % Sampling period L 1500; …

關于字節序(大端法、小端法)的定義

關于字節序(大端法、小端法)的定義《UNXI網絡編程》定義&#xff1a;術語“小端”和“大端”表示多字節值的哪一端(小端或大端)存儲在該值的起始地址。小端存在起始地址&#xff0c;即是小端字節序&#xff1b;大端存在起始地址&#xff0c;即是大端字節序。 也可以說&#xff…

html div初始隱藏點擊可見_3種CSS3移動手機隱藏菜單UI界面代碼解析/附源碼下載...

這是一款效果非常酷的jQuery和CSS3移動手機隱藏菜單UI界面設計。這個UI設計共有三種不同的打開隱藏菜單的效果&#xff0c;分別為滑動顯示&#xff0c;Material Design風格效果和展開式效果。使用方法HTML結構這三種不同的隱藏菜單的HTML結構大致基本相同。第一種滑動效果菜單的…

《數據結構與抽象:Java語言描述(原書第4版)》一P.4.1 標識類

本節書摘來華章計算機《數據結構與抽象&#xff1a;Java語言描述&#xff08;原書第4版&#xff09;》一書中的第1章 &#xff0c;&#xff3b;美&#xff3d;弗蘭克M.卡拉諾&#xff08;Frank M. Carrano&#xff09; 蒂莫西M.亨利&#xff08;Timothy M. Henry&#xff09; …

【SVM】簡單介紹(一)

1、結構風險最小化 我們想要在未知的數據上得到低的錯誤率&#xff0c;這叫做structural risk minimization;相對的&#xff0c;訓練誤差叫做empirical risk minimization 要是我們能有這樣一個式子就好了&#xff1a; Test error rate <train error rate f(N,h,p)\text {…

L8_2

4.留下pid為12345的那個sh進程&#xff0c;殺死系統中所有其它sh進程 ps –ef|grep sh |awk ‘{if($2!”12345”) {print “kill “$2}}’ >killpid.sh cat killpid.sh ./killpid.sh 5. 根據以下日志文件&#xff0c;計算使用各種瀏覽器的人所占的百分比&#xff08;注意先排…

iOS 打包iPa

http://blog.fir.im/how-to-build-adhoc-ipa/ 之前都是打包好ipa然后發送給客戶&#xff0c;特麻煩&#xff0c;fir.im網站不錯 迅速獲取自己手機的udid: http://fir.im/udid 網頁安裝ipa&#xff1a; http://fir.im/cxsv 轉載于:https://www.cnblogs.com/shidaying/p/4829102…

# 遍歷刪除字典元素_第六章 字典

一、使用字典一個簡單的字典字典是一系列鍵——值對。每個鍵都與一個值相關聯&#xff0c;可以使用鍵來訪問與之相關聯的值。與鍵相關聯的值可以是數字、字符串、列表乃至字典。事實上&#xff0c;可將任何Python對象用作字典中的值。在Python中&#xff0c;字典用放在花括號{}…

user-select屬性用法

這是在css3 UI規范中新增的一個功能&#xff0c;用來控制內容的可選擇性。 auto——默認值&#xff0c;用戶可以選中元素中的內容none——用戶不能選擇元素中的任何內容text——用戶可以選擇元素中的文本element——文本可選&#xff0c;但僅限元素的邊界內(只有IE和FF支持)all…

弄清 CSS3 的 transition 和 animation

弄清 CSS3 的 transition 和 animation 原文:弄清 CSS3 的 transition 和 animation弄清 CSS3 的 transition 和 animation transition transition 屬性是transition-property,transition-duration,transition-timing-function,transition-delay的簡稱,用于設定一個元素的兩個狀…

【SVM】簡單介紹(二)

1、SVM另一種推法 我們不管分類平面&#xff0c;直接去假設Margin的兩個邊界&#xff1a; Plus-plane {x:w?xb1}Minus-plane {x:w?xb?1}\begin{aligned} & \text { Plus-plane }\{\boldsymbol{x}: \boldsymbol{w} \cdot \boldsymbol{x}b1\} \\ & \text { Minus-plan…

圖像像素點賦值_Python 圖像處理 OpenCV (2):像素處理與 Numpy 操作以及 Matplotlib 顯示圖像...

普通操作1. 讀取像素讀取像素可以通過行坐標和列坐標來進行訪問&#xff0c;灰度圖像直接返回灰度值&#xff0c;彩色圖像則返回B、G、R三個分量。需要注意的是&#xff0c; OpenCV 讀取圖像是 BGR 存儲顯示。灰度圖片讀取操作&#xff1a;import cv2 as cv# 灰度圖像讀取gray_…