2014-01-18 33 views
4

的數組我有一個NSPredicate的字典

Array 
    Item 0 -- Dictionary 
    Sport -- String 
    Mens -- Array 
     Item 0 -- Dictionary 
     Name -- String 
     Rules -- String 
     Description -- String 
    Womens -- Array 
     Item 0 -- Dictionary 
     Name -- String 
     Rules -- String 
     Description -- String 
    Item 1 -- Dictionary 
     And so on..... 

我想創建一個給定的字符串包含名稱的內部NSPredicate搜索。我怎樣才能達到這個深度?

如果你不能理解圖。我有一個充滿字典的數組,裏面的字典是一個字符串,一個字典數組和一個字典數組,字典的內部是字符串對象

那麼我如何進入第二個字典並搜索名稱關鍵

在此先感謝

回答

22

您需要以下

NSString *str = <search string>; 
NSPredicate *pred = [NSPredicate predicateWithFormat:@"ANY Mens.Name LIKE %@ OR ANY Womens.Name LIKE %@", str, str]; 
NSArray *result = [your_array filteredArrayUsingPredicate:pred]; 
BOOL success = result.count > 0; 
+3

我不明白爲什麼「LIKE」經常被建議在謂詞中。 「LIKE」做了一個簡單的通配符搜索,所以''name LIKE'A * B'「'查找所有以A開頭並以B結尾的名字。在大多數情況下,您想要」==「或者」BEGINSWITH「或「包含」。 - (+1)。 –

+0

您應該確切地使用您自己的搜索任務中更適合的內容。這裏LIKE只是爲了說明。 – malex

+0

使用CONTAINS工作 – anotherDeveloper

-7

要到達的名字,你必須這樣做:

for (NSDictionary *itemDict in myArray) 
{ 
    NSArray *womensArray = (NSArray*)[itemDict objectForKey:@"Womens"]; 

    for (NSDictionary *womenItemDict in womensArray) 
    { 
      NSString *name = [womenItemDict objectForKey:@"Name"]; 

      //Do the comparison here 
    } 
} 
+1

你能否給你的代碼添加一些上下文? – ppperry