使用NSPredicate进行过滤,用于数组内部数组的数组计数

时间:2017-03-02 06:40:18

标签: ios objective-c nspredicate

我有以下格式的数组

[
   {
      "xyz" : [Array with different values];
      ... many more keys            
   },
   {
     .. same as above dictionary
   }
   ... many more dictionaries
]

在这里看,我有主要的字典数组,其中每个字典都有不同的键,其中有" xyz" key,其值又是一个数组。现在我想要那些字典,xyz的数组必须计数> 2。

现在我尝试使用以下谓词:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"xyz.count>2"];
NSArray *filteredArray = [resultArray filteredArrayUsingPredicate:predicate];

但是这给了我这样的错误,xyz is not key-value complaint for key "count"

2 个答案:

答案 0 :(得分:6)

在这种情况下导致-valueForKey: @"count"被发送到每个xyz实例,而xyz不是符合计数的键值编码。

相反,当您想要计数然后使用时,使用@count运算符来评估集合的计数

 NSPredicate *predicate = [NSPredicate predicateWithFormat:@"xyz.@count>2"];

而不是

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"xyz.count>2"];

答案 1 :(得分:1)

在Swift 3.0中:

let fileterdArray = resultArray.filtered(using: NSPredicate.init(format: "xyz.@count>%d", 2))