iOS:求兩個數(shù)組中相同和不同元素的集合

  • 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)使用

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴謹 對...
    cosWriter閱讀 11,632評論 1 32
  • 細雨閑風閱讀 238評論 0 0
  • 看這本《蔡康永的說話之道》絕對是給自己放松的借口,因為書中有一半是兔基斯的漫畫。好吧,我承認球球的腦子最近讀不進深...
    球球Chris閱讀 394評論 0 1
  • 以前朋友說要改變,做什么的時候,我會覺得受到威脅,心里會不舒服,雖然嘴上說著挺好的,去做吧,但是內(nèi)心希望發(fā)生什么意...
    浪漫的高貴閱讀 258評論 3 2

友情鏈接更多精彩內(nèi)容