I'm not even sure of this is possible, but if it is, it could surely help.
I have an NSArray
of NSDictionarie
s.
Each dictionary has certain keys (obviously).
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
}
I wanted to filter array with dictionaries that have Cat = 'Lab'
and IF Sex
as a key is present in the dictionary object, get the one with Male
.
In short, I cannot put together a
predicateWithFormate:%@" Cat = Lab AND ( if Sex key is present, Sex = Male";
This would get me an array of WBC, HbM
.
I don't know if this is possible, a condition within a predicate, but it would be a life saver if it was as this is how the objects are sent via web API.
Any other way of achiving the goal if not this would also be great.
While we are in the subject of Core Data, this should be simple: I want to have an attribute of the entity to be able to store either NSDate
or NSNumber
or NSString
. Is there an easy way out?
The trick here is that in an NSDictionary
, a non-present key just returns 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];
Another syntax (but available for collections only) for checking key existance is:
NSPredicate *p = [NSPredicate predicateWithFormat:@"Sex in SELF"]
I use it often with Parse.com
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With