如何在Cocoa中访问大型NSDictionary的特定子集?

时间:2009-01-14 10:16:22

标签: cocoa nsdictionary subset

我有一个包含大量自定义对象的NSDictionary对象。对象将是B类或C类,它们都从A类继承。如果对象是B类,它们将有一个内部标志(kindOfCIsh),用于将来的分组。

我如何在程序的不同时间获得包含这些对象的不同分组的NSDictionary(或NSArray)?在一种情况下,我会想要所有的B,但是另一次我会想要所有的C对象,以及满足的B对象(kindOfCIsh == true)。

是否有一种简单的方法可以访问这些子集?也许使用过滤谓词?当然,我可以遍历整个字典并手动构建所需的子集,但我觉得有更好的方法。

感谢任何帮助。

2 个答案:

答案 0 :(得分:8)

[[myDictionary allValues] filteredArrayUsingPredicate:pred];

答案 1 :(得分:1)

您可以使用类别

代码是这样的

@interface NSDictionary (dictionaryForClass)

  -(NSMutableDictionary *) dictionaryWithObjectsKindOfClass:(Class)myClass;

@end

@implementation NSDictionary (dictionaryForClass)

-(NSMutableDictionary *) dictionaryWithObjectsKindOfClass:(Class)myClass;
{
  NSMutableDictionary *ret = [[[NSMutableDictionary alloc] init] autorelease];

  for (id object in self) {
    if ([object isKindOfClass:myClass]) {
       [ret addObject:object];
    }  
  }  
  return ret;

}

@end