Ich weiß NSDictionaries
als etwas, wo Sie eine brauchen key
, um eine zu bekommen value
. Aber wie kann ich über alles keys
und values
in a iterieren NSDictionary
, damit ich weiß, welche Schlüssel es gibt und welche Werte es gibt? Ich weiß, dass es so etwas wie ein For-in-Loop- In gibt JavaScript
. Gibt es etwas ähnliches in Objective-C
?
ios
objective-c
foreach
iteration
nsdictionary
Alex Cio
quelle
quelle
Swift
Syntax iterieren , lesenAntworten:
Ja,
NSDictionary
unterstützt die schnelle Aufzählung. Mit Objective-C 2.0 können Sie Folgendes tun:Die alternative Methode (die Sie verwenden müssen, wenn Sie auf Mac OS X vor 10.5 abzielen, diese aber weiterhin auf 10.5 und iPhone verwenden können) ist die Verwendung von
NSEnumerator
:quelle
Der Blockansatz vermeidet das Ausführen des Suchalgorithmus für jeden Schlüssel :
Obwohl
NSDictionary
die Implementierung als Hashtabelle implementiert ist (was bedeutet, dass die Kosten für die Suche nach einem Element hoch sindO(1)
), verlangsamen Suchvorgänge Ihre Iteration um einen konstanten Faktor .Meine Messungen zeigen, dass für ein Wörterbuch
d
der Zahlen ...... die Zahlen mit dem Blockansatz zusammenfassen ...
... anstatt des Loop-Ansatzes ...
... ist ungefähr 40% schneller .
BEARBEITEN : Das neue SDK (6.1+) scheint die Schleifeniteration zu optimieren, sodass der Schleifenansatz jetzt etwa 20% schneller ist als der Blockansatz , zumindest für den obigen einfachen Fall.
quelle
Dies ist eine Iteration unter Verwendung des Blockansatzes:
Die automatische Vervollständigung lässt sich sehr schnell einstellen, und Sie müssen sich keine Gedanken über das Schreiben des Iterationsumschlags machen.
quelle
NSMutableDictionary
in dem Prozess mutieren müssen