2010-04-23 57 views

回答

3

謂詞會是這樣的

Class ec = [Elephant class]; 
NSPredicate *elePred = [NSPredicate predicateWithFormat:@"class==%@", ec]; 
NSArray *elephants = [array filteredArrayUsingPredicate:elePred]; 

NSPredicate *elePred = [NSPredicate predicateWithFormat:@"self isKindOfClass: %@", ec]; 

我發現謂詞是相當的,呃..應該說 「重」。我可能會更喜歡你的代碼。

如果你只是希望可以豐富您的生活一點點,你可以使用數據塊加少許併發...

NSMutableArray *results = [NSMutableArray array]; 
    [array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop){ 
     if([obj isKindOfClass:[Elephant class]]) 
      [results addObject:obj]; 
    }]; 
0

您可以創建類別NSMutableArray並添加下一個方法:

- (void)addObject:(id)anObject ifItIsKindOfClass:(Class) classObj { 
    if ([anObject isKindOfClass:classObj]) { 
     [self addObject:anObject]; 
    } 
} 

而簡單的寫:

for (id obj in array) 
{ 
     [elephants addObject:obj ifItIsKindOfClass:[Elephant class]]; 
} 

有一個加號:可重複使用

+0

我把它放在C函數中。不需要它是數組類的實例成員,甚至不需要靜態成員。將它添加到NSMutableArray似乎毫無意義,因爲它對其他類型的數組也同樣適用。 – 2010-04-23 15:17:36