搜索字典数组

时间:2018-04-13 14:35:34

标签: objective-c nsdictionary

我使用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;小时= 3;值= 0;})

我可以使用嵌套for循环遍历每个dict。但我理想的是提取“日”和“小时”,其中值为“1”。 不在上面的字典数组仅用于演示目的。实际数组有24 * 7个词典项目,用于计算一周中每一天的每小时。我的最终目标是提取值为1的时隙。 例如,在'day'0时,0到小时1之间的值为'1'。

2 个答案:

答案 0 :(得分:2)

使用格式为value == 1

的谓词
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"value == 1"];
NSArray *filteredArray = [jsonArray filteredArrayUsingPredicate:predicate];
NSLog(@"%@", filteredArray);

答案 1 :(得分:0)

  

创建一个谓词,它将检查字典是否有value: 1。然后使用此谓词过滤您的jsonArray,如下所示:

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