2016-12-15 208 views
1

的NSArrayindexOfObjectPassingTest方法然而,隨着的NSSet您可以通過使用方法objectsPassingTest直接獲取的對象。爲什麼NSArray具有indexOfObjectPassingTest方法而不是像NSSet這樣的objectsPassingTest?

我知道,是微不足道的獲取對象形成的NSArray給出的指標,但你必須代碼吧:),當然在的NSSet你沒有索引,所以必須返回一個對象。

所以,問題是爲什麼這個數據類型有相同的任務不同的方法(找到通過一些測試元素),而不是實施objectsPassingTest

+0

@danh在關於'filteredArrayUsingPredicate好點:'。 (我刪除了他評論的答案,因爲我認爲他的評論比我的回答好。) –

回答

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; 
} 
相關問題