字典allKeys vs keyEnumerator?

时间:2016-05-25 10:18:29

标签: ios objective-c dictionary

何时使用?

如果我循环字典并从中删除键值,那么枚举器会为此工作吗?文档似乎回答了这个问题:

  

如果将此方法与可变子类的实例一起使用   NSDictionary,您的代码不应修改条目   列举。如果您打算修改条目,请使用allKeys   用于创建字典键的“快照”的属性。然后用   此快照用于遍历条目,并在整个过程中对其进行修改。

表现?,因为人们总是想知道。

1 个答案:

答案 0 :(得分:0)

至少可以通过两种方式实现NSDictionary的迭代:将NSArray[NSDictionary allKeys]NSEnumerator一起使用。

NSArray *keyArray =  [bigUglyDictionary allKeys];
int count = [keyArray count];
for (int i=0; i < count; i++) {
  NSDictionary *tmp = [bigUglyDictionary objectForKey:[ keyArray objectAtIndex:i]];
}

NSEnumerator *enumerator = [bigUglyDictionary keyEnumerator];
id key;
while ((key = [enumerator nextObject])) {
  NSDictionary *tmp = [bigUglyDictionary objectForKey:key];
} 

第二种方式更快一些,所以如果你使用庞大的词典并且不需要带有键的数组