2010-10-12 181 views

回答

197

的标准方法是这样的

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

我遇到过更多的方法来做这个错误比你可以动摇棒。谢谢!!! – mpemburn 2012-05-17 20:34:14

+0

如果只有某种方式可以做到:'for(id key,myDict中的值)',那将是完美的。 – 2013-07-12 17:32:15

+0

谢谢!容易忘记简单的语法有时。 – abriggs 2013-08-09 16:40:08

22

您可以使用[dict allValues]让你值的NSArray。请注意,它不保证通话之间的任何顺序。

+3

我会在(字典中的id键)上使用这一个,特别是在可变字典上,因为如果字典在枚举时被修改,后者会抛出一个令人讨厌的错误。 – sigsegv 2010-10-12 13:56:50

+0

“它不保证” - 这是经常需要的(大多数语言有一个版本的字典,确保订单) - 在实践中* *保持秩序? – Adam 2012-12-25 17:33:48

+0

@Adam在MacOS X上,我的顺序非常混乱(不是插入顺序,也不是字母顺序,没有任何内容),但在调用之间保持一致。 – jv42 2013-02-24 10:24:20

26

可以使用

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

如果您的目标操作系统支持块。

1

另一种方法是使用Dicts枚举器。下面是来自苹果的一些示例代码:

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

while ((value = [enumerator nextObject])) { 
    /* code that acts on the dictionary’s values */ 
} 
2
  1. 对于简单的循环,快速列举比快一点基于块的环
  2. 这是容易做到的并发或反向比基于块的枚举枚举快速列举 当NSDictionary的循环,你可以得到一重击与基于块的枚举键和值,而与快速列举你必须使用该密钥来检索单独的消息的价值在FAS发送

牛逼枚举

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 
    }]; 
3

你不需要值赋给变量。您可以直接使用myDict[key]访问它。

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