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

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

于 2012-08-02T08:51:36.660 回答
23

You can use [dict allValues] to get an NSArray of your values. Be aware that it doesn't guarantee any order between calls.

于 2010-10-12T12:03:32.847 回答
5
  1. 对于简单循环,快速枚举比基于块的循环快一点
  2. 使用基于块的枚举进行并发或反向枚举比使用快速枚举更容易使用 NSDictionary 循环时,您可以使用基于块的枚举器一次获得键和值,而使用快速枚举,您必须使用键来检索单独发送消息中的值

在快速枚举中

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

另一种方法是使用字典枚举器。以下是来自 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 回答