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 > 5するscores.@avg.doubleValue > 5と正常に動作します。

于 2013-05-03T21:44:20.803 に答える
0

self@aLevelOfIndirection さんから回答があったように、数字なのでに置き換える必要がありますdoubleValue

コレクション内の KVC オペレーターについて説明している有益な記事があります: http://nshipster.com/kvc-collection-operators/

于 2016-02-18T11:12:31.640 に答える