查詢NSArray 中是否包含指定元素

判斷一個(gè)數(shù)組中是否存在某個(gè)指定的元素方法總結(jié):
NSArray * array = @[@"123",@"234",@"345",@"456",@"890",@"678",@"789",@"890",@"012"];

// 一、遍歷數(shù)組:
// 方法 1
for (int i = 0 ; i < array.count; i ++) {
    if ([array[i] isEqualToString:@"678"]) {
        NSLog(@"array[%d] = %@",i,array[i]);
    }
}

// 方法 2
for (NSString * string in array) {
    if ([string isEqualToString:@"789"]) {
        // 無(wú)法獲得數(shù)組下標(biāo)
    }
}

// 方法 3   block 遍歷方法,提供下標(biāo),對(duì)象和是否繼續(xù)的標(biāo)志
[array enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
    if ([obj isEqualToString:@"789"]) {
        // 無(wú)法獲得數(shù)組下標(biāo)
        NSLog(@"array[%ld] = %@",idx, obj);
    }
}];

[array enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
    if ([obj isEqualToString:@"789"]) {
        // 無(wú)法獲得數(shù)組下標(biāo)
        NSLog(@"array[%ld] = %@",idx, obj);
    }
}];

// 二、查詢

NSString * match = @"890";
NSPredicate * predicate = [NSPredicate predicateWithFormat:@"SELF == %@",match];
NSArray * results = [array filteredArrayUsingPredicate:predicate];
if (results.count) {
    // 得到目標(biāo)字符串的數(shù)組
    NSLog(@"============= %@",results);
}

控制臺(tái)輸出為:

屏幕快照 2017-05-26 下午4.28.22.png

NSPredicate 查詢、搜索:
Cocoa框架中的NSPredicate用于查詢,原理和用法都類似于SQL中的where,作用相當(dāng)于數(shù)據(jù)庫(kù)的過(guò)濾取。

最常用到的函數(shù)
+ (NSPredicate *)predicateWithFormat:(NSString *)predicateFormat, ...;

1.比較運(yùn)算符 > 、< 、== 、 >= 、<= 、 !=
例:@"number >= 99"

2.范圍運(yùn)算符:IN 、BETWEEN
例:@"number BETWEEN {1,5}"
      @"address IN {'shanghai','nanjing'}"

3.字符串本身:SELF 
例:@"SELF == 'APPLE'"

4.字符串相關(guān):BEGINSWITH、ENDSWITH、CONTAINS
例:@"name CONTAIN[cd] 'ang'"   //包含某個(gè)字符串
      @"name BEGINSWITH[c] 'sh'"     //以某個(gè)字符串開(kāi)頭
      @"name ENDSWITH[d] 'ang'"      //以某個(gè)字符串結(jié)束
注:[c]不區(qū)分大小寫(xiě) , [d]不區(qū)分發(fā)音符號(hào)即沒(méi)有重音符號(hào) , [cd]既不區(qū)分大小寫(xiě),也不區(qū)分發(fā)音符號(hào)。

5.通配符:LIKE
例:@"name LIKE[cd] '*er*'"    //*代表通配符,Like也接受[cd].
      @"name LIKE[cd] '???er*'"

6.正則表達(dá)式:MATCHES
例:NSString *regex = @"^A.+e$";   //以A開(kāi)頭,e結(jié)尾
      @"name MATCHES %@",regex

使用場(chǎng)景:

    // 查詢數(shù)組中是否包含某個(gè)字符串
    NSArray * predicateArray = @[@"123",@"234",@"345",@"456",@"890",@"678",@"789",@"890",@"012"];
    NSString * string = @"34";
    NSPredicate * pred = [NSPredicate predicateWithFormat:@"SELF CONTAINS %@",string];
    NSLog(@"predicateArray result :%@",[predicateArray filteredArrayUsingPredicate:pred]);

參考文章:
http://blog.csdn.net/zyq527758142/article/details/51278172
http://www.cnblogs.com/thefeelingofsimple/archive/2013/01/31/2886915.html

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

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

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