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
、したがって、少なくともそのコレクション演算子は述語で使用できます。