Ios 以NSDictionary作为对象的嵌套数组上的NSPredicate
我有一本字典,比如:Ios 以NSDictionary作为对象的嵌套数组上的NSPredicate,ios,objective-c,nsarray,nsdictionary,nspredicate,Ios,Objective C,Nsarray,Nsdictionary,Nspredicate,我有一本字典,比如: { "2017-05-02" = ( { "always_valid" = 0; date = "2017-05-02"; from = "12:00"; to = "13:00"; }, { "always_valid" = 0; date = "2017-05-02"; from = "12:00
{
"2017-05-02" = (
{
"always_valid" = 0;
date = "2017-05-02";
from = "12:00";
to = "13:00";
},
{
"always_valid" = 0;
date = "2017-05-02";
from = "12:00";
to = "12:00";
},
{
"always_valid" = 0;
date = "2017-05-02";
from = "14:00";
"hourly_rate" = 12;
to = "15:00";
}
);
"2017-05-03" = (
{
"always_valid" = 0;
date = "2017-05-03";
from = "12:00";
to = "13:00";
}
);
"2017-05-18" = (
{
"always_valid" = 1;
date = "2017-05-18";
from = "12:00";
to = "12:00";
}
);
}
我正在申请
NSPredicate *filter = [NSPredicate predicateWithFormat:@"always_valid = \"1\""];
NSArray *alwaysvalid = [[dic allValues] filteredArrayUsingPredicate:filter];
当我有这样的结构时,它就起作用了
数组>字典
但现在就像
数组>数组>字典
通过对数组执行[dic allValues]。
任何帮助我应该应用什么来保持快速。尝试以下方法:
NSArray *array = [NSArray arrayWithObject:dict]; // you can also do same for Name key...
NSArray *alwaysvalid = [array filteredArrayUsingPredicate:filter];
您需要做的是枚举字典并创建新的筛选字典
NSMutableDictionary *filterDic = [[NSMutableDictionary alloc] init];
NSPredicate *filter = [NSPredicate predicateWithFormat:@"always_valid = 1"];
[dict enumerateKeysAndObjectsUsingBlock:^(NSString* key, NSArray* obj, BOOL *stop) {
NSArray *filterArray = [obj filteredArrayUsingPredicate:filter];
if (filterArray.count > 0) {
filterDic[key] = filterArray;
}
}];
我应该返回“2017-05-18”=({“始终有效”=1;date=“2017-05-18”;from=“12:00”;to=“12:00”;});由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“ALL或ANY运算符的左侧必须是NSArray或NSSet。”;NSArray*alwaysvalid=[[dic allValues]filteredArrayUsingPredicate:filter];“始终有效”将始终为1或0。@SameerAzem您是否尝试过使用
EnumerateKeysandObjectsSusingBlock
?@SameerAzem我不明白,因为如果您的字典包含所有值作为数组,这应该可以很好地工作