我有NSArray
NSDictionary
。
NSDictionary
的其中一个键包含NSArray
个字符串。
有没有办法可以使用NSPredicate
在字符串数组中查找特定的strins?
谢谢:)
另外:这项工作很棒,但不适用于sublevelArray
predicate = [NSPredicate predicateWithFormat:@" %K LIKE[cd] %@", sKey, sLookForString];
答案 0 :(得分:1)
在NSArray上你可以使用filteredArrayUsingPredicate:
,在NSDictionary上使用enumerateKeysAndObjectsUsingBlock:
然后对每个值做一个filteredArrayUsingPredicate:
如果是NSArray你可以使用evaluateWithObject:
谓词本身。
答案 1 :(得分:1)
只需在格式字符串中将 LIKE 替换为 CONTAINS 即可。例如,给定此数组:
NSArray *dogs = @[@{@"name" : @"Fido",
@"toys" : @[@"Ball", @"Kong"]},
@{@"name" : @"Rover",
@"toys" : @[@"Ball", @"Rope"]},
@{@"name" : @"Spot",
@"toys" : @[@"Rope", @"Kong"]}];
...可以使用以下谓词获取仅包含字典的过滤数组,其中键玩具的值是包含字符串 Kong 的数组。
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K CONTAINS[cd] %@", @"toys", @"Kong"];
答案 2 :(得分: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];
}