Как я могу получить доступ к определенным подмножествам большого NSDictionary в Какао? - PullRequest
3 голосов
/ 14 января 2009

У меня есть один объект NSDictionary, который содержит большое количество пользовательских объектов. Объекты будут либо класса B, либо класса C, оба из которых наследуются от класса A. Если объекты имеют тип B, они будут иметь внутренний флаг (kindOfCIsh), который будет использоваться для будущей группировки.

Как я могу в разное время в моей программе получить NSDictionary (или NSArray), который содержит разные группировки этих объектов? В одном случае мне понадобятся все объекты B, а в другой раз - все объекты C, а также объекты B, которые удовлетворяют (kindOfCIsh == true).

Есть ли простой способ получить доступ к этим подмножествам? Возможно, используя предикаты фильтра? Я могу, конечно, пройтись по всему словарю и создать требуемое подмножество вручную, но у меня есть ощущение, что есть лучший способ.

Любая помощь приветствуется.

Ответы [ 2 ]

8 голосов
/ 15 января 2009

[[myDictionary allValues] FilterArrayUsingPredicate: pred];

1 голос
/ 14 января 2009

Вы можете использовать категории

код примерно такой

@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
...