wake-up-neo.com

für jede Schleife in Objective-C für den Zugriff auf NSMutabledictionary

Ich habe Schwierigkeiten beim Zugriff auf veränderbare Wörterbuchschlüssel und -werte in Objective-C.

Angenommen, ich habe folgendes:

NSMutableDictionary *xyz=[[NSMutableDictionary alloc] init];

Ich kann Schlüssel und Werte setzen. Jetzt möchte ich nur auf jeden Schlüssel und Wert zugreifen, aber ich kenne die Anzahl der festgelegten Schlüssel nicht.

In PHP ist es sehr einfach, etwas wie folgt:

foreach ($xyz as $key => $value)

Wie ist das in Objective-C möglich?

257
for (NSString* key in xyz) {
    id value = xyz[key];
    // do stuff
}

Dies funktioniert für jede Klasse, die dem NSFastEnumeration-Protokoll (verfügbar ab 10.5 und iOS) entspricht, obwohl NSDictionary eine der wenigen Sammlungen ist, mit denen Sie Schlüssel anstelle von Werten aufzählen können. Ich schlage vor, Sie lesen über schnelle Aufzählung im Programmierthema für Sammlungen .

Oh, ich sollte jedoch hinzufügen, dass Sie [~ # ~] niemals [~ # ~] eine Sammlung ändern sollten, während Sie sie auflisten.

642
zneak

Um die Option 10.6+ zum Auflisten von Schlüsseln und Werten mithilfe von Blöcken nicht auszulassen ...

[dict enumerateKeysAndObjectsUsingBlock:^(id key, id object, BOOL *stop) {
    NSLog(@"%@ = %@", key, object);
}];

Wenn Sie möchten, dass die Aktionen gleichzeitig ausgeführt werden:

[dict enumerateKeysAndObjectsWithOptions:NSEnumerationConcurrent
                              usingBlock:^(id key, id object, BOOL *stop) {
    NSLog(@"%@ = %@", key, object);
}];
97
Quinn Taylor

Wenn Sie mutieren das Wörterbuch beim Aufzählen benötigen:

for (NSString* key in xyz.allKeys) {
    [xyz setValue:[NSNumber numberWithBool:YES] forKey:key];
}
13
Brody Robertson

Der einfachste Weg, ein Wörterbuch aufzulisten, ist

for (NSString *key in tDictionary.keyEnumerator) 
{
    //do something here;
}

dabei ist tDictionary das NSDictionary oder NSMutableDictionary, das Sie durchlaufen möchten.

4
Avinash

Ich empfehle Ihnen, den Aufzählung: Elemente einer Sammlung durchlaufen Teil des Programmierhandbuch für Sammlungen für Cocoa zu lesen. Es gibt einen Beispielcode für Ihren Bedarf.

4

Die schnelle Aufzählung wurde in 10.5 und im iPhone-Betriebssystem hinzugefügt und ist deutlich schneller, nicht nur syntaktischer Zucker. Wenn Sie auf die ältere Laufzeitumgebung (d. H. 10.4 und höher) abzielen müssen, müssen Sie die alte Aufzählungsmethode verwenden:

NSDictionary *myDict = ... some keys and values ...
NSEnumerator *keyEnum = [myDict keyEnumerator];
id key;

while ((key = [keyEnum nextObject]))
{
    id value = [myDict objectForKey:key];
    ... do work with "value" ...
}

Sie geben das Enumerator-Objekt nicht frei und können es nicht zurücksetzen. Wenn Sie von vorne beginnen möchten, müssen Sie ein neues Enumerator-Objekt aus dem Wörterbuch anfordern.

2
dreamlax

Sie können -[NSDictionary allKeys] um auf alle Tasten zuzugreifen und diese zu durchlaufen.

1
gcamp