6
votes

Comment itérer sur un dictionnaire sans connaître les clés, tout en obtenant une clé et un objet?

J'ai un nsdictionnaire et je veux itérer sur les objets. Mais en même temps, je dois connaître la clé du dictionnaire.

Je me souviens qu'il y avait une forme spéciale et fantaisie d'énumération rapide, mais j'ai oublié la syntaxe exacte.

Quelqu'un?


0 commentaires

5 Réponses :


1
votes
for (id key in mydictionary) {
   id mything = [mydictionary objectForKey:key];
}

0 commentaires

8
votes

Je pense que ce que vous voulez, c'est quelque chose comme ceci: xxx

pris de ici .


1 commentaires

ressemble à la "forme normale" de l'énumération rapide. la même chose utilisant un tableau renvoie un objet réel. Donc, cela retourne vraiment la clé, ce qui peut ensuite être utilisé pour accéder à la valeur? logique.



0
votes

Keyenumerator renvoie un objet qui vous permet d'itérer à travers chacune des clés du dictionnaire. De ici


0 commentaires

7
votes

C'est aussi un bon choix si vous aimez les blocs.

[dict enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {

}]


1 commentaires

+1 Ceci est probablement beaucoup plus rapide que la variante "Fastenumeration" (comme il peut utiliser le Coret Foundation's's CFDictionaryApplyFunction ). Il enregistre la recherche chère pour chaque élément, car elle peut simplement itération sur les godets et passer à la fois la clé et la valeur.



0
votes

À ma connaissance, à l'époque où vous avez posé la question, il n'y avait qu'une seule façon de traverser les clés et les valeurs en même temps: CFDictionaryApplyfunction .

Utilisation de cette fonction de base de base implique un pointeur de fonction C laide pour le corps de la boucle et beaucoup de coulée non moins laidée et sans frais.

@zekel a le mode moderne d'itération un dictionnaire. Votez-le!


1 commentaires

Au fait, énumérerKeysandObjectsUXELLOCK: a été introduit dans iOS 4, donc quatre jours après cette question :)