28 votes

Comment obtenir la clé d'un objet donné à partir d'un NSMutableDictionary?

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?

62voto

Kevin Points 2012

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

19voto

AddisDev Points 720

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
 

6voto

Tom Irving Points 8113

Jeter un coup d'œil à:

 - (NSArray *)allKeysForObject:(id)anObject
 

6voto

valdyr Points 99

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

Comment puis-je spécifier le bloc de l'objet / prédicat requis par NSDictionary de keysOfEntriesPassingTest?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X