Je sais NSDictionaries
que quelque chose où vous avez besoin d'un key
pour obtenir un value
. Mais comment puis-je répéter sur tout keys
et values
dans un NSDictionary
, afin que je sache quelles sont les clés et quelles sont les valeurs? Je sais qu'il y a quelque chose appelé for-in-loop in JavaScript
. Y a-t-il quelque chose de similaire dans Objective-C
?
ios
objective-c
foreach
iteration
nsdictionary
Alex Cio
la source
la source
Swift
syntaxe, reportez-vous à cet article: stackoverflow.com/a/24111700/419348Réponses:
Oui,
NSDictionary
prend en charge l'énumération rapide. Avec Objective-C 2.0, vous pouvez le faire:La méthode alternative (que vous devez utiliser si vous ciblez Mac OS X avant 10.5, mais que vous pouvez toujours utiliser sur 10.5 et iPhone) consiste à utiliser un
NSEnumerator
:la source
L'approche par bloc évite d'exécuter l'algorithme de recherche pour chaque clé :
Même si elle
NSDictionary
est implémentée sous forme de table de hachage (ce qui signifie que le coût de recherche d'un élément estO(1)
), les recherches ralentissent toujours votre itération d' un facteur constant .Mes mesures montrent que pour un dictionnaire
d
de nombres ...... résumer les chiffres avec l'approche par blocs ...
... plutôt que l'approche en boucle ...
... est environ 40% plus rapide .
EDIT : Le nouveau SDK (6.1+) semble optimiser l'itération de la boucle, donc l'approche en boucle est maintenant environ 20% plus rapide que l'approche en bloc , au moins pour le cas simple ci-dessus.
la source
Il s'agit d'une itération utilisant une approche par blocs:
Avec l'auto-complétion est très rapide à définir, et vous n'avez pas à vous soucier de l'écriture de l'enveloppe d'itération.
la source
NSMutableDictionary
dans le processus