Objective c 搜索字典数组

Objective c 搜索字典数组,objective-c,nsdictionary,Objective C,Nsdictionary,我正在使用api调用从服务器获取数据。使用nsj序列化后 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=

我正在使用api调用从服务器获取数据。使用nsj序列化后

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循环遍历每个dict。但理想情况下,我希望提取值为“1”的“天”和“小时”。 不在上面的字典数组仅用于演示目的。实际数组有24*7个字典项来说明一周中每一天的每一小时。我的最终目标是提取值为1的时间段。 例如,在“日”0,值为“1”,介于0小时到1小时之间

创建一个谓词,它将检查字典是否有
值:1
。然后使用以下谓词过滤
jsonArray


使用格式为
value==1的谓词

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

它成功了。虽然为了得到每天的小时数,我复制了谓词,如下所示。NSPredicate*谓词=[NSPredicate谓词格式:@“值==1”];NSArray*filteredArray=[jsonArray filteredArray使用谓词:谓词];NSPredicate*predicate2=[NSPredicate predicateWithFormat:@“day==0”];NSArray*filteredArray 2=[filteredArray filteredArray使用谓词:谓词2];NSLog(@“%@”,Filteredarray 2);是否有更清晰的方法是的,只使用一个格式为
@“value==1&&day==0”的谓词
只需添加
valueForKey
。它是一种键值编码方法,返回给定键的所有值的数组:
NSArray*filteredArray=[[jsonArray filteredArray usingpredicate:predicate]valueForKey:@“hour”]太好了,它成功了。虽然我确实找到了冗长而混乱的解决方案。NSMUTABLEARRY*array=[[NSMUTABLEARRY alloc]init];对于(filteredArray中的NSDictionary*项){[array addObject:[item objectForKey:@“hour”]];}这两种方法都会产生所需的输出,但您的解决方案更优雅。谢谢。这是我的过滤器Darray(0,1,2,7,8,9,13,14)我需要在startTime1,endTime1,startTime2,endTime2,startTime3,endTime3中获得3个时隙;第一个是0-2小时,第二个是7-9小时,第三个是13-14小时。我所尝试的是(inti=1;i0){endTime1=filteredArray[i];}}}你知道更简洁的方法吗?
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"value == 1"];
NSArray *filteredArray = [jsonArray filteredArrayUsingPredicate:predicate];
NSLog(@"%@", filteredArray);