NSPredicate 获取包含特定键值的数组

NSPredicate to get Array containing specific key value

使用item-"apple"

获取数组的所有元素

我的输入

item_list: [
    {
        CurrentDate = “4/2/2016";
        search_item =(             
            item_name = @“apple”;
        );
    },
    {
        CurrentDate = “27/1/2016";
        search_item =(
            item_name = @“Ball”;   
        );
    },
    {
        CurrentDate = “17/2/2016";
        search_item =(
            item_name = @“Cat”; 
        );
    },
    {
        CurrentDate = “6/2/2016";
        search_item =(
            item_name = @“apple”;
        );
    },
]

我需要的输出

item_list: [
    {
        CurrentDate = “4/2/2016";
        search_item =(             
            item_name = @“apple”;
        );
    },
    {
        CurrentDate = “6/2/2016";
        search_item =(
            item_name = @“apple”;
        );
    },
]

我尝试但无法运行的代码

NSArray*  filtered = [[item_list valueForKey:@"search_item"] filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(item_name == %@)", @“apple”]];

看看 NSPredicate's predicateWithBlock: 而不是 predicateWithFormat: 我不知道他们如何比较性能,但我发现使用块更容易处理。

这是一个例子:

[NSPredicate predicateWithBlock:^BOOL(id  _Nonnull evaluatedObject, NSDictionary<NSString *,id> * _Nullable bindings) {
    return [(NSDictionary *)evaluatedObject[@"search_item"][@"item_name"] isEqualToString:@"apple"];
}];
NSPredicate *predicate =
[NSPredicate predicateWithFormat:@"ANY search_item.item_name CONTAINS[c] %@", @"apple"];  
NSArray *array =[item_list filteredArrayUsingPredicate:predicate];

你的 Predicate 是对的只是把你的字符串放在 single quote

之间
NSArray*  filtered = [item_listArray filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"Any search_item.item_name = '%@'", @“apple”]];

尝试以下...

NSPredicate *predicate =
[NSPredicate predicateWithFormat:@"ANY self.isFree CONTAINS[c] %@", @"YES"]; 
NSArray *array =[item_list filteredArrayUsingPredicate:predicate];