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);
    

拓展:

保留關(guān)鍵字: 使用的時候炕婶,不區(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或链、比較運(yùn)算符

    =惫恼、==:判斷兩個表達(dá)式是否相等澳盐,在謂詞中=和==是相同的意思都是判斷,而沒有賦值這一說
    >=洞就,=>:判斷左邊表達(dá)式的值是否大于或等于右邊表達(dá)式的值
    <=盆繁,=<:判斷右邊表達(dá)式的值是否小于或等于右邊表達(dá)式的值
    >:判斷左邊表達(dá)式的值是否大于右邊表達(dá)式的值
    <:判斷左邊表達(dá)式的值是否小于右邊表達(dá)式的值
    !=旬蟋、<>:判斷兩個表達(dá)式是否不相等
    BETWEEN:BETWEEN表達(dá)式必須滿足表達(dá)式 BETWEEN {下限油昂,上限}的格式,要求該表達(dá)式必須大于或等于下限倾贰,并小于或等于上限
    
  • 2冕碟、邏輯運(yùn)算符

    AND、&&:邏輯與匆浙,要求兩個表達(dá)式的值都為YES時安寺,結(jié)果才為YES。
    OR首尼、||:邏輯或挑庶,要求其中一個表達(dá)式為YES時言秸,結(jié)果就是YES
    NOT、 !:邏輯非迎捺,對原有的表達(dá)式取反
    
  • 3举畸、字符串比較運(yùn)算符

    BEGINSWITH:檢查某個字符串是否以指定的字符串開頭(如判斷字符串是否  以a開頭:BEGINSWITH 'a')
    ENDSWITH:檢查某個字符串是否以指定的字符串結(jié)尾
    CONTAINS:檢查某個字符串是否包含指定的字符串
    
    LIKE:檢查某個字符串是否匹配指定的字符串模板。
    其之后可以跟?代表一個字符和*代表任意多個字符兩個通配符凳枝。比如"name LIKE '*ac*'"抄沮,這表示name的值中包含ac則返回YES;
    "name LIKE '?ac*'"岖瑰,表示name的第2叛买、3個字符為ac時返回YES。
    
    MATCHES:檢查某個字符串是否匹配指定的正則表達(dá)式蹋订。雖然正則表達(dá)式的執(zhí)行效率是最低的率挣,但其功能是最強(qiáng)大的,也是我們最常用的辅辩。
    

    示例:

    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ū)分大小寫和重音符號的难礼。如果希望字符串比較運(yùn)算不區(qū)分大小寫和重音符號,請在這些運(yùn)算符后使用[c]玫锋,[d]選項蛾茉。其中[c]是不區(qū)分大小寫,[d]是不區(qū)分重音符號撩鹿,其寫在字符串比較運(yùn)算符之后谦炬,比如:name LIKE[cd] 'cafe',那么不論name是cafe节沦、Cafe還是café上面的表達(dá)式都會返回YES键思。

  • 4、集合運(yùn)算符

    ANY甫贯、SOME:集合中任意一個元素滿足條件吼鳞,就返回YES。
    ALL:集合中所有元素都滿足條件叫搁,才返回YES赔桌。
    NONE:集合中沒有任何元素滿足條件就返回YES。如:NONE person.age < 18渴逻,表示person集合中所有元素的age>=18時疾党,才返回YES。
    IN:等價于SQL語句中的IN運(yùn)算符惨奕,只有當(dāng)左邊表達(dá)式或值出現(xiàn)在右邊的集合中才會返回YES雪位。
    
  • 5、直接量:在謂詞表達(dá)式中可以使用如下直接量雹洗。

    FALSE香罐、NO:代表邏輯假
    TRUE穴吹、YES:代表邏輯真
    NULL幽勒、NIL:代表空值
    SELF:代表正在被判斷的對象自身
    "string"或'string':代表字符串
    數(shù)組:和c中的寫法相同,如:{'one', 'two', 'three'}啥容。
    數(shù)值:包括證書、小數(shù)和科學(xué)計數(shù)法表示的形式
    十六進(jìn)制數(shù):0x開頭的數(shù)字
    八進(jìn)制:0o開頭的數(shù)字
    二進(jìn)制:0b開頭的數(shù)字
    

參考:
iOS開發(fā)-最優(yōu)辦法查找兩個數(shù)組相同與不同的數(shù)據(jù)
iOS中的謂詞(NSPredicate)使用

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末击吱,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子覆醇,更是在濱河造成了極大的恐慌炭臭,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鞋仍,死亡現(xiàn)場離奇詭異,居然都是意外死亡落午,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進(jìn)店門溃斋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來吸申,“玉大人,你說我怎么就攤上這事呛谜。” “怎么了隐岛?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長割坠。 經(jīng)常有香客問我齐帚,道長彼哼,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任剪菱,我火速辦了婚禮,結(jié)果婚禮上孝常,老公的妹妹穿的比我還像新娘。我一直安慰自己构灸,他們只是感情好岸梨,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著曹阔,像睡著了一般。 火紅的嫁衣襯著肌膚如雪次兆。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天漓库,我揣著相機(jī)與錄音,去河邊找鬼渺蒿。 笑死,一個胖子當(dāng)著我的面吹牛茂装,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播少态,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼易遣,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起屋摇,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤幽邓,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后牵舵,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡白修,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年重斑,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片窥浪。...
    茶點(diǎn)故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡笛丙,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出胚鸯,到底是詐尸還是另有隱情,我是刑警寧澤姜钳,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站哥桥,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏拟糕。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一送滞、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧犁嗅,春花似錦、人聲如沸愧哟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至端衰,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間旅东,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工抵代, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人荤牍。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像劈榨,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子同辣,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評論 2 345

推薦閱讀更多精彩內(nèi)容