94

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

4

6 に答える 6

211

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

for(id key in myDict) {
    id value = [myDict objectForKey:key];
    [value doStuff];
}
于 2010-10-12T11:58:52.993 に答える
30

あなたが使用することができます

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

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

于 2012-08-02T08:51:36.660 に答える
23

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

于 2010-10-12T12:03:32.847 に答える
5
  1. 単純なループの場合、高速列挙はブロックベースのループよりも少し高速です
  2. 高速列挙よりもブロックベースの列挙で同時または逆列挙を行う方が簡単です。NSDictionaryでループする場合、ブロックベースの列挙で1回のヒットでキーと値を取得できますが、高速列挙ではキーを使用して取得する必要があります。別のメッセージ送信の値

高速列挙で

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
  }];
于 2014-08-12T10:06:00.597 に答える
3

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

    for(id key in myDict) {
        NSLog(@"Key:%@ Value:%@", key, myDict[key]);
    }
于 2016-08-26T06:50:34.457 に答える
2

もう1つの方法は、DictsEnumeratorを使用することです。Appleのサンプルコードは次のとおりです。

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

while ((value = [enumerator nextObject])) {
    /* code that acts on the dictionary’s values */
}
于 2013-04-23T13:28:10.433 に答える