8

我什至不确定这是否可能,但如果是的话,它肯定会有所帮助。

我有一个NSArrays 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 发送对象的方式。

如果不是这样,实现目标的任何其他方式也会很棒。

虽然我们在核心数据的主题中,这应该很简单:我希望实体的属性能够存储NSDateorNSNumberNSString。有没有简单的出路?

4

2 回答 2

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];
于 2012-06-05T21:32:03.757 回答
5

另一种检查键存在的语法(但仅适用于集合)是:

NSPredicate *p = [NSPredicate predicateWithFormat:@"Sex in SELF"]

我经常在 Parse.com 上使用它

于 2013-11-25T18:40:04.190 回答