J'ai un objet qui est dans un grand NSMutableDictionary, et j'ai besoin de savoir de quelle clé il s'agit. Je veux donc rechercher ce "tableau" dans les deux colonnes. Non seulement avec des clés, mais aussi avec des objets (pour obtenir des clés). Est-ce possible?
Réponses
Trop de publicités?Look de la classe parent (NSDictionary)
- (NSArray *)allKeysForObject:(id)anObject
Qui sera de retour un NSArray de toutes les clés pour un Objet donné de la Valeur. MAIS il le fait par l'envoi d'un isEqual message à chaque objet du Dictionnaire donc, pour votre grand jeu de données, ceci peut ne pas être la meilleure performance.
Peut-être vous avez besoin de tenir une certaine forme de supplémentaire à l'indexation de la structure structure(s) pour vous permettre de localiser les objets sur certaines valeurs critiques au sein de eux, lié à la clé sans complément d'objet direct de comparaison
Pour répondre à votre question d'une manière plus spécifique, utilisez ce qui suit pour obtenir une clé pour un objet particulier:
NSString *knownObject = @"the object";
NSArray *temp = [dict allKeysForObject:knownObject];
NSString *key = [temp objectAtIndex:0];
//"key" is now equal to the key of the object you were looking for
C'est certainement possible avec NSDictionary de la méthode des blocs
- (NSSet *)keysOfEntriesPassingTest:(BOOL (^)(id key, id obj, BOOL *stop))predicate;
Vous avez besoin de retourner les objets qui satisfont à certaines conditions (prédicat).
L'utiliser comme ceci:
NSSet *keys = [myDictionary keysOfEntriesPassingTest:^BOOL(id key, id obj, BOOL *stop) {
BOOL found = (objectForWhichIWantTheKey == obj);
if (found) *stop = YES;
return found;
}];
Découvrez cette réponse pour plus de détails