2012-02-16 9 views
3

filterUsingPredicateを使用してNSMutableArrayの要素を取り除こうとしています。NSMutableArray filterUsingPredicateは特定のインデックスを過ぎただけです

トリッキーな部分は、述語テストに合格するかどうかに関係なく、常に少なくとも10個のアイテムを配列に保持したいということです。だから、のようなもの:

NSPredicate * cullPredicate = [NSPredicate predicateWithFormat: 
     @"distanceFromCurrent <= 25 OR index < 10"]; 

[self.myArray filterUsingPredicate:cullPredicate]; 

私がやりたいことの指標として「OR指数< 10」...私はそれが動作しません実現しています。

これは述語で可能ですか?または、要素が10で始まる別の配列を取り出し、フィルターを適用してから元の配列に追加する必要がありますか?

答えて

5

NSPredicateには、これを行うために使用できる-predicateWithBlock:メソッドがあります。このようなもの:

NSArray *array = [[self.myArray copy] autorelease]; 
NSPredicate *predicate = [NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) {   
    if ([array indexOfObject:evaluatedObject] < 10) return YES; 
    return evaluatedObject.distanceFromCurrent <= 25; 
}]; 
[self.myArray filterUsingPredicate:predicate]; 
+0

ありがとうございました。 –

+0

'-filteredArrayUsingPredicate:'ではなく-filterWithPredicate: –

+1

@ RichardJ.RossIII彼はフィルタリングしようとしているNSMutableArrayだと言いました。 ' - [NSMutableArray filterUsingPredicate:]'は正しいメソッドです(私は彼のエラーをコピーしました。とにかく、私の答えの編集を示唆しているRichardLovejoyによって修正されました。 –

関連する問題