2010-04-23 38 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