-
1、用
set處理:[[self.loginBtn rac_signalForControlEvents:UIControlEventTouchUpInside] subscribeNext:^(id x) { NSArray *arrayOne = @[@"1", @"2", @"3", @"4"]; NSArray *arrayTwo = @[@"3", @"4", @"5", @"6"]; NSMutableSet *setOne = [NSMutableSet setWithArray:arrayOne]; NSMutableSet *setTwo = [NSMutableSet setWithArray:arrayTwo]; // 取重疊的元素 // [setOne intersectSet:setTwo]; // 取出差異元素,setOne 剩下[@"1", @"2"] [setOne minusSet:setTwo]; NSMutableSet *anotherSetOne = [NSMutableSet setWithArray:arrayOne]; [setTwo minusSet:anotherSetOne]; // setTwo 即為兩個數(shù)組差異化元素的集合 [setTwo unionSet:setOne]; }]; -
2、用 謂詞 處理:
NSArray *arrayOne = @[@"1", @"2", @"3", @"4"]; NSArray *arrayTwo = @[@"3", @"4", @"5", @"6"]; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF IN %@", arrayOne]; NSArray *sameArray = [arrayTwo filteredArrayUsingPredicate:predicate]; NSLog(@"%@", sameArray); NSMutableArray *muArrayOne = [NSMutableArray arrayWithArray:arrayOne]; NSMutableArray *muArrayTwo = [NSMutableArray arrayWithArray:arrayTwo]; [muArrayOne removeObjectsInArray:sameArray]; [muArrayTwo removeObjectsInArray:sameArray]; NSArray *unsameArray = [muArrayOne arrayByAddingObjectsFromArray:muArrayTwo]; NSLog(@"unsameArray: %@", unsameArray);
拓展:
保留關鍵字: 使用的時候,不區(qū)分大小寫。
AND、OR、IN、NOT、ALL、ANY、SOME、NONE、LIKE、CASEINSENSITIVE、CI、MATCHES、CONTAINS、BEGINSWITH、ENDSWITH、BETWEEN、NULL、NIL、SELF、TRUE、YES、FALSE、NO、FIRST、LAST、SIZE、ANYKEY、SUBQUERY、CAST、TRUEPREDICATE、FALSEPREDICATE
-
1、比較運算符
=、==:判斷兩個表達式是否相等,在謂詞中=和==是相同的意思都是判斷,而沒有賦值這一說 >=,=>:判斷左邊表達式的值是否大于或等于右邊表達式的值 <=,=<:判斷右邊表達式的值是否小于或等于右邊表達式的值 >:判斷左邊表達式的值是否大于右邊表達式的值 <:判斷左邊表達式的值是否小于右邊表達式的值 !=、<>:判斷兩個表達式是否不相等 BETWEEN:BETWEEN表達式必須滿足表達式 BETWEEN {下限,上限}的格式,要求該表達式必須大于或等于下限,并小于或等于上限 -
2、邏輯運算符
AND、&&:邏輯與,要求兩個表達式的值都為YES時,結(jié)果才為YES。 OR、||:邏輯或,要求其中一個表達式為YES時,結(jié)果就是YES NOT、 !:邏輯非,對原有的表達式取反 -
3、字符串比較運算符
BEGINSWITH:檢查某個字符串是否以指定的字符串開頭(如判斷字符串是否 以a開頭:BEGINSWITH 'a') ENDSWITH:檢查某個字符串是否以指定的字符串結(jié)尾 CONTAINS:檢查某個字符串是否包含指定的字符串 LIKE:檢查某個字符串是否匹配指定的字符串模板。 其之后可以跟?代表一個字符和*代表任意多個字符兩個通配符。比如"name LIKE '*ac*'",這表示name的值中包含ac則返回YES; "name LIKE '?ac*'",表示name的第2、3個字符為ac時返回YES。 MATCHES:檢查某個字符串是否匹配指定的正則表達式。雖然正則表達式的執(zhí)行效率是最低的,但其功能是最強大的,也是我們最常用的。示例:
DataModel *Lily = [DataModel configModelWithName:@"Lily" sex:@"women" age:18]; NSPredicate *sexPredicate = [NSPredicate predicateWithFormat:@"sex like '?ily'"]; NSPredicate *agePredicate = [NSPredicate predicateWithFormat:@"age >= 10"]; BOOL sexResult = [sexPredicate evaluateWithObject:Lily]; // 0 BOOL ageResult = [agePredicate evaluateWithObject:Lily]; // 1注:字符串比較都是區(qū)分大小寫和重音符號的。如果希望字符串比較運算不區(qū)分大小寫和重音符號,請在這些運算符后使用
[c],[d]選項。其中[c]是不區(qū)分大小寫,[d]是不區(qū)分重音符號,其寫在字符串比較運算符之后,比如:name LIKE[cd] 'cafe',那么不論name是cafe、Cafe還是café上面的表達式都會返回YES。 -
4、集合運算符
ANY、SOME:集合中任意一個元素滿足條件,就返回YES。 ALL:集合中所有元素都滿足條件,才返回YES。 NONE:集合中沒有任何元素滿足條件就返回YES。如:NONE person.age < 18,表示person集合中所有元素的age>=18時,才返回YES。 IN:等價于SQL語句中的IN運算符,只有當左邊表達式或值出現(xiàn)在右邊的集合中才會返回YES。 -
5、直接量:在謂詞表達式中可以使用如下直接量。
FALSE、NO:代表邏輯假 TRUE、YES:代表邏輯真 NULL、NIL:代表空值 SELF:代表正在被判斷的對象自身 "string"或'string':代表字符串 數(shù)組:和c中的寫法相同,如:{'one', 'two', 'three'}。 數(shù)值:包括證書、小數(shù)和科學計數(shù)法表示的形式 十六進制數(shù):0x開頭的數(shù)字 八進制:0o開頭的數(shù)字 二進制:0b開頭的數(shù)字
參考:
iOS開發(fā)-最優(yōu)辦法查找兩個數(shù)組相同與不同的數(shù)據(jù)
iOS中的謂詞(NSPredicate)使用