以 NSDictionary 作为对象的嵌套数组上的 NSPredicate
Posted
技术标签:
【中文标题】以 NSDictionary 作为对象的嵌套数组上的 NSPredicate【英文标题】:NSPredicate on nested array with NSDictionary as object 【发布时间】:2017-05-02 13:43:40 【问题描述】:我有一个类似的 NSDictionary:
"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]。 任何帮助我应该申请什么以保持快速。
【问题讨论】:
【参考方案1】:您需要做的是需要枚举您的字典并创建新的过滤字典。
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;
];
【讨论】:
由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“ALL 或 ANY 运算符的左侧必须是 NSArray 或 NSSet。” 来自 NSPredicate *filter = [NSPredicate predicateWithFormat:@"ANY always_valid = 1"]; NSArray *alwaysvalid = [[dic allValues] filteredArrayUsingPredicate:filter]; 和“always_valid”将始终为 1 或 0。 @SameerAzeem 你试过使用enumerateKeysAndObjectsUsingBlock
吗?
@SameerAzeem 我不明白,因为如果您的字典包含所有值作为数组,这应该可以正常工作【参考方案2】:
试试这个:
NSArray *array = [NSArray arrayWithObject:dict]; // you can also do same for Name key...
NSArray *alwaysvalid = [array filteredArrayUsingPredicate:filter];
【讨论】:
我应该返回 "2017-05-18" = ( "always_valid" = 1; date = "2017-05-18"; from = "12:00"; to = "12: 00";);以上是关于以 NSDictionary 作为对象的嵌套数组上的 NSPredicate的主要内容,如果未能解决你的问题,请参考以下文章
JSONModel 嵌套字典数组 JSONModel nest NSDictionary NSArray
如何使用 NSDictionary 收集嵌套在数组中的 JSON 数据