web-dev-qa-db-fra.com

boucle à travers un NSMutableDictionary

Comment puis-je parcourir tous les objets d'un NSMutableDictionary quelles que soient les clés?

92
Rupert

Une façon standard ressemblerait à ceci

for(id key in myDict) {
    id value = [myDict objectForKey:key];
    [value doStuff];
}
208
Henrik P. Hessel

vous pouvez utiliser

[myDict enumerateKeysAndObjectsUsingBlock: ^(id key, id obj, BOOL *stop) {
    // do something with key and obj
}];

si votre système d'exploitation cible prend en charge les blocs.

29
Andrey Zverev

Vous pouvez utiliser [dict allValues] pour obtenir un NSArray de vos valeurs. Sachez qu'il ne garantit aucune commande entre les appels.

22
jv42
  1. Pour une boucle simple, l'énumération rapide est un peu plus rapide qu'une boucle basée sur des blocs
  2. Il est plus facile de faire une énumération simultanée ou inversée avec une énumération basée sur des blocs qu'avec une énumération rapide Lorsque vous bouclez avec NSDictionary, vous pouvez obtenir la clé et la valeur en une seule fois avec un énumérateur basé sur des blocs, tandis qu'avec l'énumération rapide, vous devez utiliser la clé pour récupérer la valeur dans un message séparé envoyer

en dénombrement rapide

for(id key in myDictionary) {
   id value = [myDictionary objectForKey:key];
  // do something with key and obj
}

en blocs:

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

   // do something with key and obj
  }];
4
user3540599

Vous n'avez pas besoin d'attribuer de valeur à une variable. Vous pouvez y accéder directement avec myDict[key].

    for(id key in myDict) {
        NSLog(@"Key:%@ Value:%@", key, myDict[key]);
    }
3
Alexander

Une autre façon consiste à utiliser l'énumérateur Dicts. Voici un exemple de code d'Apple:

NSEnumerator *enumerator = [myDictionary objectEnumerator];
id value;

while ((value = [enumerator nextObject])) {
    /* code that acts on the dictionary’s values */
}
2
Hendrik