循环遍历NSMutableDictionary

Rup*_*ert 92 objective-c nsmutabledictionary ios

无论键是什么,我如何遍历NSMutableDictionary中的所有对象?

Hen*_*sel 208

标准方式看起来像这样

for(id key in myDict) {
    id value = [myDict objectForKey:key];
    [value doStuff];
}
Run Code Online (Sandbox Code Playgroud)

  • 我遇到了更多错误的方法,而不是你可以摇一摇.谢谢!!! (5认同)
  • 最好迭代通过键(即myDict.allKeys`中的`id键),而不是字典.这允许您改变字典,这可能是您想要做的. (4认同)

And*_*rev 29

您可以使用

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

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


jv4*_*v42 22

您可以使用[dict allValues]获取NSArray您的值.请注意,它不保证呼叫之间的任何顺序.

  • 我会在(字典中的id键)上使用这个,特别是在可变字典上,因为如果在枚举时修改字典,后者会抛出一个讨厌的错误. (3认同)
  • @stephen通常它在某个地方很重要而在其他地方并不重要.您还可以获得可能对某些情况有用的唯一键约束. (2认同)

use*_*599 5

  1. 对于简单循环,快速枚举比基于块的循环要快一些
  2. 使用基于块的枚举比使用快速枚举更容易进行并发或反向枚举当使用 NSDictionary 循环时,您可以使用基于块的枚举器一次性获取键和值,而使用快速枚举时,您必须使用键来检索值在单独的消息中发送

在快速枚举中

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

在块中:

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

   // do something with key and obj
  }];
Run Code Online (Sandbox Code Playgroud)