1

我的阵列

(
   {id:1,data:(@"macbook",@"mac mini")},
   {id:2,data:(@"ipad",@"ipod")},
   {id:3,data:(@"macbook",@"ipod")}
)

我有一个谓词

NSString *text = @"mac";
[NSPredicate predicateWithFormat:@"(data contains[cd] %@)",text];
[array filteredArrayUsingPredicate:predicate];

但它不会遍历我的字典中的数组(我的结果应该是一个包含 2 个 id 为 1 和 3 的对象的数组)

4

2 回答 2

4
NSString* text = @"mac" ;
NSPredicate* predicate = [NSPredicate predicateWithFormat:@"any data contains[cd] %@",text] ;
NSArray* filteredArray = [theArray filteredArrayUsingPredicate:predicate] ;
于 2013-01-02T15:18:06.610 回答
2

我个人发现NSPredicate格式很容易出错。

您可以考虑使用块来过滤您的NSArray

NSString * filterString = @"mac";
NSIndexSet * indexes = [array indexesOfObjectsPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) {
    NSArray * entry = obj[@"data"];
    for (NSString * value in entry)
        if ([value rangeOfString:filterString].location != NSNotFound)
            return YES;
    return NO;
}];
NSArray * filteredArray = [array objectsAtIndexes:indexes];

它肯定更长更冗长,但我发现它绝对更容易阅读和调试。

于 2013-01-02T15:43:43.993 回答