web-dev-qa-db-ja.com

NSMutableDictionaryをループする

キーに関係なく、NSMutableDictionary内のすべてのオブジェクトをループするにはどうすればよいですか?

92
Rupert

標準的な方法は次のようになります

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

使用できます

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

ターゲットOSがブロックをサポートしている場合。

29
Andrey Zverev

[dict allValues]を使用して、値のNSArrayを取得できます。呼び出し間の順序を保証するものではないことに注意してください。

22
jv42
  1. 単純なループの場合、高速列挙はブロックベースのループよりも少し高速です
  2. 高速な列挙よりもブロックベースの列挙で同時または逆の列挙を行う方が簡単です別のメッセージ送信の値

高速列挙

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

ブロック内:

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

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

変数に値を割り当てる必要はありません。 myDict[key]で直接アクセスできます。

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

別の方法は、Dicts Enumeratorを使用することです。 Appleのサンプルコードを次に示します。

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

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