2014-05-06 171 views
0

我有NSArrayNSDictionaryNSPredicate,在NSArray中搜索,內NSArray的NSDict

NSDictionary的其中一個鍵包含字符串的NSArray

有沒有一種方法可以使用NSPredicate來查找該字符串數組中的特定字符串?

謝謝:)

另外:這項工作很好,但不適合sublevelArray

predicate = [NSPredicate predicateWithFormat:@" %K LIKE[cd] %@", sKey, sLookForString]; 
+0

你有什麼試過的?在SO上有這樣的問題,可能不是那麼多的子平面,但是,您可以縮小搜索範圍,並根據另一個子級修改NSPredicate。 – Larme

回答

1

只需更換LIKECONTAINS在您的格式字符串中。例如,給定該數組:

NSArray *dogs = @[@{@"name" : @"Fido", 
        @"toys" : @[@"Ball", @"Kong"]}, 
        @{@"name" : @"Rover", 
        @"toys" : @[@"Ball", @"Rope"]}, 
        @{@"name" : @"Spot", 
        @"toys" : @[@"Rope", @"Kong"]}]; 

...下面謂詞可用於獲得僅包含一個字典過濾陣列,其中用於鍵玩具的值是包含字符串的數組

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K CONTAINS[cd] %@", @"toys", @"Kong"]; 
1

在NSArray中您可以使用filteredArrayUsingPredicate:,在NSDictionary中使用enumerateKeysAndObjectsUsingBlock:,然後爲每個值做無論是filteredArrayUsingPredicate:如果是一個NSArray,或者你可以使用謂詞本身使用evaluateWithObject:

+0

只需發現枚舉鍵和對象使用塊。感謝那! :) – Franck

0

如果你想基於字符串數組字典上的濾鏡陣列,可以使用-predicateWithBlock到濾鏡陣列,如下圖所示的代碼:與

- (NSArray *)filterArray:(NSArray *)array WithSearchString:(NSString *)searchString { 
    NSPredicate *predicate = [NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) { 
     NSDictionary *dictionary = (NSDictionary *)evaluatedObject; 
     NSArray *strings = [dictionary objectForKey:@"strings"]; 

     return [strings containsObject:searchString]; 
    }]; 

    return [array filteredArrayUsingPredicate:predicate]; 
}