我甚至不确定这是可能的,但如果确实如此,那肯定会有所帮助。
我有NSArray
个NSDictionarie
。
每个字典都有某些键(显然)。
Dict{
Title: WBCCount
Cat: Lab
}
Dict{
Title: HbM
Cat: Lab
Sex: Male
}
Dict{
Title: HbF
Cat: Lab
Sex: Female
}
Dict{
Title: PC_Count
Cat: CBC
Sex: Female
}
我希望使用Cat = 'Lab'
和 IF Sex
的字典过滤数组,因为字典对象中存在一个键,得到Male
的字典
总之,我不能把它放在一起
predicateWithFormate:%@" Cat = Lab AND ( if Sex key is present, Sex = Male";
这会给我一个WBC, HbM
的数组。
我不知道这是否可能,谓词中的一个条件,但如果它是通过Web API发送对象的方式,它将是一个救生员。
如果不是这样,任何其他实现目标的方式也会很棒。
虽然我们是Core Data的主题,但这应该很简单:我希望实体的属性能够存储NSDate
或NSNumber
或NSString
。有一条简单的出路吗?
答案 0 :(得分:7)
这里的诀窍是,在NSDictionary
中,非现有密钥只返回nil
:
NSArray *dictionaries = @[
@{ @"Title": @"T1", @"Cat": @"Lab", @"Sex": @"Male" },
@{ @"Title": @"T2", @"Cat": @"C2" },
@{ @"Title": @"T3", @"Cat": @"Lab", @"Sex": @"Female" },
@{ @"Title": @"T4", @"Cat": @"Lab" }
];
NSPredicate *pred = [NSPredicate predicateWithFormat:@"(Sex == nil OR Sex = 'Male') AND Cat = 'Lab'" ];
NSArray *result = [dictionaries filteredArrayUsingPredicate:pred];
答案 1 :(得分:5)
用于检查密钥存在的另一种语法(但仅适用于集合)是:
NSPredicate *p = [NSPredicate predicateWithFormat:@"Sex in SELF"]
我经常在Parse.com上使用它