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];
使用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];