2016-12-15 14 views
1

にNSArrayしかしNSSetであなたは方法objectsPassingTestを使用してオブジェクトを直接取得することができますindexOfObjectPassingTest方法があります。私が知っているNSArrayにはNSObjectのようなobjectsPassingTestではなく、indexOfObjectPassingTestというメソッドがありますか?

は、オブジェクトがにNSArrayインデックスを与えられた形成入手は簡単ですが、あなたは:)それをコーディングする必要があり、それは、オブジェクトを返す必要がありますので、NSSetで、もちろんあなたは、インデックスを持っていません。

このデータ型は同じタスクのためのさまざまな方法を持っている理由そこで質問ではなく、実装objectsPassingTestの(いくつかのテストを渡すことによって、要素を見つける。)ですか。

+0

'filteredArrayUsingPredicateについての良い点を作った@danh:'。 (私は彼のコメントが私の答えよりも良かったと思うので、彼がコメントした答えを削除しました。) –

答えて

0

インデックスからオブジェクトへの移行は簡単ですが、オブジェクトからインデックスへの移行は簡単ではないためです。

1

なぜ類推がNSArrayに存在しないのかわかりません。ドキュメントを熟読すると、かなり多少のコレクションメソッドに多相双子がありますが、これはできません。

filteredArrayUsingPredicate:は十分にほとんどの問題に合うかもしれませんが、NSSet署名を一致させるために、このようにNSArrayを拡張するのは無理ではないでしょう。

// NSArray+NotUnreasonableAddition.h 
@interface NSArray (NotUnreasonableAddition) 
- (NSArray *)objectsPassingTest:(BOOL (^)(id, BOOL *))test; 
@end 

// NSArray+NotUnreasonableAddition.m 
@implementation NSArray (NotUnreasonableAddition) 

- (NSArray *)objectsPassingTest:(BOOL (^)(id, BOOL *))test { 
    NSMutableArray *result = [NSMutableArray new]; 
    for (id obj in self) { 
     BOOL stop = NO; 
     if (test(obj, &stop)) [result addObject:obj]; 
     if (stop) break; 
    } 
    return result; 
} 
関連する問題