2009-01-14 2 views
3

J'ai un seul objet NSDictionary qui contient un grand nombre d'objets personnalisés. Les objets seront soit de classe B, soit de classe C, tous deux héritant de la classe A. Si les objets sont de type B, ils auront un drapeau interne (kindOfCIsh) qui sera utilisé pour le regroupement futur.Comment puis-je accéder à des sous-ensembles spécifiques d'un grand NSDictionary dans Cocoa?

Comment puis-je, à différents moments dans mon programme, obtenir un NSDictionary (ou NSArray) qui contient différents groupes de ces objets? Dans un cas, je voudrai tout de B, mais une autre fois je voudrai tous les objets C, plus les objets B qui satisfont (kindOfCIsh == true).

Existe-t-il un moyen simple d'accéder à ces sous-ensembles? Peut-être en utilisant des prédicats de filtre? Je peux, bien sûr, parcourir le dictionnaire entier et construire le sous-ensemble requis manuellement, mais j'ai le sentiment qu'il existe un meilleur moyen.

Toute aide est appréciée.

Répondre

8

[[MyDictionary allvalues] filteredArrayUsingPredicate: pred];

+0

On dirait que les prédicats seront la voie à suivre. Je vous remercie. –

1

Vous pouvez utiliser les catégories

le code est quelque chose comme ça

@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 
+0

Merci pour la réponse, hellra1ser. C'est encore, essentiellement une boucle à travers tous les éléments, mais j'aime bien que c'est caché dans une catégorie. –

Questions connexes