搜索字典数组
Searching array of Dictionaries
我正在使用 api 调用从服务器获取数据。使用 NSJSONSerialization
后
NSArray *jsonArray = [NSJSONSerialization JSONObjectWithData: responseData options: NSJSONReadingMutableContainers error: &e];
我得到了字典数组。
({day = 0;hour = 0;value = 1; },{day = 0;hour = 1;value = 1;},day = 0;hour =2;val=0;},{day = 0;hour = 3;value = 0;})
我可以在其中使用嵌套的 for 循环遍历每个字典。但我最理想的是提取值为“1”的 'day' 和 'hour'。
以上字典数组仅用于演示目的。实际数组有 24*7 个字典项来说明一周中每一天的每个小时。我的最终目标是提取值为 1 的时间段。
例如,'day' 0 值在第 0 小时到第 1 小时之间为“1”。
Create an predicate, which will check if dictionary have value: 1
. Then filter your jsonArray
with this predicate as following:
NSArray *jsonArray = [NSJSONSerialization JSONObjectWithData: responseData options: NSJSONReadingMutableContainers error: &e];
NSPredicate *predicate = [NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) {
// EvaluatedObject will be dictionary object while applied on jsonArray
return [evaluatedObject[@"value"] intValue] == 1;
}];
filteredarr = [NSMutableArray arrayWithArray:[jsonArray filteredArrayUsingPredicate:predicate]];
使用格式为 value == 1
的谓词
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"value == 1"];
NSArray *filteredArray = [jsonArray filteredArrayUsingPredicate:predicate];
NSLog(@"%@", filteredArray);
我正在使用 api 调用从服务器获取数据。使用 NSJSONSerialization
后NSArray *jsonArray = [NSJSONSerialization JSONObjectWithData: responseData options: NSJSONReadingMutableContainers error: &e];
我得到了字典数组。
({day = 0;hour = 0;value = 1; },{day = 0;hour = 1;value = 1;},day = 0;hour =2;val=0;},{day = 0;hour = 3;value = 0;})
我可以在其中使用嵌套的 for 循环遍历每个字典。但我最理想的是提取值为“1”的 'day' 和 'hour'。 以上字典数组仅用于演示目的。实际数组有 24*7 个字典项来说明一周中每一天的每个小时。我的最终目标是提取值为 1 的时间段。 例如,'day' 0 值在第 0 小时到第 1 小时之间为“1”。
Create an predicate, which will check if dictionary have
value: 1
. Then filter yourjsonArray
with this predicate as following:
NSArray *jsonArray = [NSJSONSerialization JSONObjectWithData: responseData options: NSJSONReadingMutableContainers error: &e];
NSPredicate *predicate = [NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) {
// EvaluatedObject will be dictionary object while applied on jsonArray
return [evaluatedObject[@"value"] intValue] == 1;
}];
filteredarr = [NSMutableArray arrayWithArray:[jsonArray filteredArrayUsingPredicate:predicate]];
使用格式为 value == 1
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"value == 1"];
NSArray *filteredArray = [jsonArray filteredArrayUsingPredicate:predicate];
NSLog(@"%@", filteredArray);