1. 程式人生 > >[iOS]查詢陣列NSArray中是否包含指定的元素

[iOS]查詢陣列NSArray中是否包含指定的元素

一 問題描述

查詢陣列中是否包含指定

二 問題解決

方法一

    NSArray  *array [email protected][@"abc123", @"cde234" , @"fgh456", @"ijk567", @"KLm567", @"MnO890", @"opq012", @"Rst123"];
    //匹配字串,反回結果, SELF==表示陣列中每一個元素
    NSString *match1 = @"MnO890";
    NSPredicate *predicate1 = [NSPredicate predicateWithFormat:@"SELF == %@"
, match1]; NSArray *results1 = [array filteredArrayUsingPredicate:predicate1];

方法二

[array enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
        if ([obj isEqualToString:@"opq012"]) {
            NSLog(@"%@-索引%d",obj, (int)idx);
        }
    }];  

三 拓展延伸

如何使用謂詞NSPredicate實現快速尋找。

先看下定義

NSPredicate *ca = [NSPredicate predicateWithFormat:(NSString *), ...];  

說明:
Format:有如下幾種規則


(1)比較運算子>,<,==,>=,<=,!=
可用於數值及字串
例:@"number > 100"

(2)範圍運算子:IN、BETWEEN
例:@"number BETWEEN {1,5}"
   @"address IN {'shanghai','beijing'}"

(3)字串本身:SELF 
例:@“SELF == ‘APPLE’"

(4)字串相關:BEGINSWITH、ENDSWITH、CONTAINS
例:@"
name CONTAIN[cd] 'ang'" //包含某個字串 @"name BEGINSWITH[c] 'sh'" //以某個字串開頭 @"name ENDSWITH[d] 'ang'" //以某個字串結束 注:[c]不區分大小寫[d]不區分發音符號即沒有重音符號[cd]既不區分大小寫,也不區分發音符號。 (5)萬用字元:LIKE 例:@"name LIKE[cd] '*er*'" //*代表萬用字元,Like也接受[cd]. @"name LIKE[cd] '???er*'" (6)正則表示式:MATCHES 例:NSString *regex = @"^A.+e$"; //以A開頭,e結尾 @"name MATCHES %@",regex"

具體使用方法如下

1.NSString物件

    NSArray  *array [email protected][@"abc123", @"cde234" , @"fgh456", @"ijk567", @"KLm567", @"MnO890", @"opq012", @"Rst123"];
    //匹配字串,反回結果, SELF==表示陣列中每一個元素
    NSString *match1 = @"MnO890";
    NSPredicate *predicate1 = [NSPredicate predicateWithFormat:@"SELF == %@", match1];
    NSArray *results1 = [array filteredArrayUsingPredicate:predicate1];

    //近似匹配字串,類似SQL中的語法
    NSString *match2 = @"fgh45";
    NSPredicate *predicate2 = [NSPredicate predicateWithFormat:@"SELF contains %@", match2];
    NSArray *results2 = [array filteredArrayUsingPredicate:predicate2];
    //不區分大小寫匹配
    NSString *match3 = @"klm567";
    NSPredicate *predicate3 = [NSPredicate predicateWithFormat:@"SELF like[cd] %@", match3];
    NSArray *results3 = [array filteredArrayUsingPredicate:predicate3];
    //正則匹配
    NSString *match4 = @"[a-zA-Z0-9]{6}";
    NSPredicate *predicate4 = [NSPredicate predicateWithFormat:@"SELF matches %@", match4];
    NSArray *results4 = [array filteredArrayUsingPredicate:predicate4];

    NSLog(@"%@\n%@\n%@\n%@\n",results1,results2,results3,results4);

輸出結果

(
    MnO890
)
(
    fgh456
)
(
    KLm567
)
(
    abc123,
    cde234,
    fgh456,
    ijk567,
    KLm567,
    MnO890,
    opq012,
    Rst123
)

2.含有屬性的物件

@interface Person: NSObject 
{
    NSString *_name;
    NSString *_telephone;
    NSInteger _id;
}

@property (nonatomic, copy) NSString *name;
@property (nonatomic, copy) NSString *telephone;
@property (nonatomic, assign) NSInteger id;

@end

1).等於查詢

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name == %@", "張三"]; 
NSArray *filteredArray = [array filteredArrayUsingPredicate:predicate];

2).模糊查詢

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name CONTAINS %@", @"A"]; //predicate只能是物件
NSArray *filteredArray = [array filteredArrayUsingPredicate:predicate];

相關推薦

[iOS]查詢陣列NSArray是否包含指定元素

一 問題描述 查詢陣列中是否包含指定 二 問題解決 方法一 NSArray *array [email protected][@"abc123", @"cde234" , @"fgh456", @"ijk567", @"KLm

php 字串是否包含指定字串的多種方法

編寫程式的時候,經常要處理字串,最基本就是字串的查詢,在php檢測字串中是否包含指定字串可以使用正則,如果你對正則不瞭解,那麼有幾個函式可以為您提供方便。 1. strstr strstr() 函式搜尋一個字串在另一個字串中的第一次出現。 該函式返回字串的其餘部分(從匹配點)。如果未找到所搜

PostgreSQL: 如何判斷字串是否包含指定字元。

今天有開發人員問到: PostgreSQL 中是否有函式可以判斷一個字串中是否包含指定字元,如果包 含則返回 ture ,否則返回 false,例如,如果字串 'abcde' 中包含 'ab' 則返回 true,於是想了想,共總 結以下三種方法,暫且不考慮效能。 一 方法一: 使用

Query判斷陣列是否包含某個元素

JQuery判斷陣列中是否包含某個元素使用$.inArray("js", arr); var arr = [ "xml", "html", "css", "js" ];   $.in

Map.containsKey方法——判斷Map集合物件是否包含指定的鍵名

containsKey方法用來判斷Map集合物件中是否包含指定的鍵名。 語法  boolean containsKey(Object key)  返回值:如果Map集合中包含指定的鍵名,則返回true;否則返回false。 引數:key是要查詢的Map集合的鍵名物件。

【C#】判斷字串是否包含指定字串,contains與indexof方法效率問題

1 class Program 2 { 3 private const int N = 10000000; 4 private static Stopwatch watch = new Stopwatch(); 5 static v

判斷陣列是否包含元素,判斷字串是否包含某字串

let arr = [1, 2, 3, 4]; if (arr.indexOf('1') > -1) {}    //判斷1是否在陣列arr中,true=是   let str = string; if (str.indexOf('t') !== -1) {}&nb

js 陣列去重 + 是否包含指定字串 + 深淺拷貝+數組合並

window.uniq=function (array){ array.sort(); var temp=[array[0]]; for(var i = 1; i < array.length; i++){

shell-判斷指定檔案是否包含指定的字串

來自百度 grep "prod" /home/admin/gitrep/otp/otp-webapp-api/src/main/webapp/WEB-INF/web.xml > /dev/n

shell提取指定列並判斷提取結果是否包含指定字串

判斷第一列是否包含某一個關鍵字,如果與關鍵字相等,則輸出當前行的最後一列內容。 fileType=$( blkid | awk '{if($1=="關鍵字") {print $NF}}') 然後,在判斷filetype中是否包含指定的字串,     if echo $fil

Java高效判斷陣列是否包含某個元素

如何檢查一個數組(無序的)是否包含一個特定的值呢?這是一個在Java中經常用到的並且非常有用的操作。本文將分析幾種常見用法及其時間成本。1、使用 ava.util.Arrays.asList(arr)

判斷陣列物件是否包含某個物件,判斷2個物件是否相等

var arr =[ {name:'zhangsan'}, {name:'lisi'}, {name:'wangwu'} ]; var json1 = {name:"zhangsan"}; // 方法一:(相容ie8) console.log(JSON.stri

java如何判斷陣列是否包含元素

有兩種方法可以判斷陣列是否包含元素: 方法1, 將陣列轉換為list,然後使用list的contains方法來判斷: Arrays.asList(...).contains(...) 方法2,遍歷陣列判斷: publicstatic<T>boolean c

Java如何高效的判斷陣列是否包含某個元素

如何檢查一個數組(無序)是否包含一個特定的值?這是一個在Java中經常用到的並且非常有用的操作。同時,這個問題在Stack Overflow中也是一個非常熱門的問題。在投票比較高的幾個答案中給出了幾種不同的方法,但是他們的時間複雜度也是各不相同的。本文將分析幾種常見用法

判斷 Map 是否包含指定的 key 和 value

重寫name的hashcode()和equals()方法 package com.imooc.collection; import java.util.HashSet; import java.util.Set; /** * 學生類 * @author

java如何高效的判斷陣列是否包含某個元素---

package zaLearnpackage; import org.apache.commons.lang3.ArrayUtils; import java.util.Arrays; import java.util.HashSet; import java.uti

判斷字串是否包含指定字元或特殊字元

Pattern p = Pattern.compile("[@#$%^&*]"); Matcher m = p.matcher(s); boolean match = m.find(); 如果

在Java如何高效判斷陣列是否包含某個元素

如何檢查一個數組(無序)是否包含一個特定的值?這是一個在Java中經常用到的並且非常有用的操作。同時,這個問題在Stack Overflow中也是一個非常熱門的問題。在投票比較高的幾個答案中給出了幾種不同的方法,但是他們的時間複雜度也是各不相同的。本文將分析

sqlserver查詢所有表是否包含字元並替換

declare @str varchar(100),@replaceStr varchar(100) --設定要模糊搜尋的字串 set @str='蘇州工業園區' --設定替換的字串 set @replaceStr='' declare @s varchar(8000) d

Jsp jstl表示式是否包含指定字串

需求: 根據不同的字串顯示對應的東西。 比如,一個單子裡面包含批銷單與退訂單,批銷單號是 'P' 開頭,退訂單是 'BL' 開頭,要根據不同的字串顯示不同的單號,此時就會用到JSTL表示式中的FN:含有 語法: <c:if test="${fn:con