1

有没有办法构造一个 NSPredicate 以便可以通过大于 5 的平均分数来过滤以下数组?

NSArray *objs = @[
@{@"scores":@[@3, @5, @2]},
@{@"scores":@[@5, @2, @8, @9]},
@{@"scores":@[@7, @1, @4]}
];

我尝试了各种组合,其中这个似乎最有希望(考虑到关键路径@avg.self可以通过普通 KVC 获取数组中数字的平均值):

NSPredicate *pred = [NSPredicate predicateWithFormat:@"scores.@avg.self > 5"];
NSArray     *filterd = [objs filteredArrayUsingPredicate:pred];

我得到的运行时错误如下:

NSUnknownKeyException',原因:'[<__NSArrayI 0x10011b7c0> valueForUndefinedKey:]:此类不符合键 avg 的键值编码。

该谓词字符串有效:scores.@count > 3,因此至少该集合运算符可以在谓词中使用。

4

2 回答 2

1

如果您更改scores.@avg.self > 5scores.@avg.doubleValue > 5它会正常工作。

于 2013-05-03T21:44:20.803 回答
0

当@aLevelOfIndirection 回复您时,您需要替换self为,doubleValue因为它是一个数字。

有一篇很好的文章解释了集合中的 KVC 运算符,这对您很有用:http: //nshipster.com/kvc-collection-operators/

于 2016-02-18T11:12:31.640 回答