Wie durchlaufe ich alle Objekte in einem NSMutableDictionary unabhängig von den Schlüsseln?Schleife durch ein NSMutableDictionary
Antwort
Ein Standardverfahren wie dieses
for(id key in myDict) {
id value = [myDict objectForKey:key];
[value doStuff];
}
aussehen würden Sie [dict allValues]
können eine NSArray
Ihrer Werte zu erhalten. Beachten Sie, dass es keine Reihenfolge zwischen Anrufen garantiert.
Ich würde diese über den (ID-Schlüssel im Wörterbuch) verwenden, besonders in einem veränderbaren Wörterbuch, da letzterer einen unangenehmen Fehler verursacht, wenn das Wörterbuch während der Aufzählung geändert wird. – sigsegv
"es garantiert nicht" - das wird häufig benötigt (die meisten Sprachen haben eine Version des Wörterbuchs, das die Reihenfolge garantiert) - macht es * in der Praxis * Ordnung aufrechtzuerhalten? – Adam
@Adam Auf MacOS X hatte ich ziemlich Reihenfolge durcheinander (nicht Reihenfolge der Einfügung, nicht alphabetisch, nichts), aber konsistent zwischen den Anrufen. – jv42
können Sie
[myDict enumerateKeysAndObjectsUsingBlock: ^(id key, id obj, BOOL *stop) {
// do something with key and obj
}];
wenn Ihr Ziel OS-Bausteine unterstützt verwenden.
Eine andere Möglichkeit ist die Verwendung des Dicts Enumerator. Hier ist ein Beispielcode von Apple:
NSEnumerator *enumerator = [myDictionary objectEnumerator];
id value;
while ((value = [enumerator nextObject])) {
/* code that acts on the dictionary’s values */
}
- Für einfache Schleife, schnelle Aufzählung ist ein bisschen schneller als blockbasierte Schleife
- Es ist einfacher, gleichzeitig zu tun oder Reverse-Enumeration mit blockbasierten Aufzählung als mit schnelle Aufzählung Wenn mit NSDictionary Looping Sie können mit einem blockbasierten Enumerator in einem Hit Schlüssel und Wert erhalten, während bei schnellen Auszählung Sie den Schlüssel verwenden, den Wert in einer separaten Nachricht senden
in fas abrufen t Aufzählung
for(id key in myDictionary) {
id value = [myDictionary objectForKey:key];
// do something with key and obj
}
in Blöcke:
[myDictionary enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
// do something with key and obj
}];
Sie brauchen nicht Wert einer Variablen zugewiesen werden soll. Sie können direkt darauf zugreifen mit .
for(id key in myDict) {
NSLog(@"Key:%@ Value:%@", key, myDict[key]);
}
Ich habe mehr Möglichkeiten gefunden, dies falsch zu machen, als Sie einen Stock schütteln können. Vielen Dank!!! – mpemburn
Wenn es nur einen Weg gäbe: 'für (ID-Schlüssel, Wert in myDict) wäre das perfekt. –
Danke! Einfach, die einfache Syntax manchmal zu vergessen. – abriggs