【问题标题】:Saving the iterator on NSMutableDictionary在 NSMutableDictionary 上保存迭代器
【发布时间】:2018-01-25 01:18:09
【问题描述】:

在 C++ 中,可以在 map 上声明迭代器。 然后迭代器可以被提升和保存,这样以后可以从保存的位置继续迭代。

如何在 Obj-C 中高效地做同样的事情?

【问题讨论】:

  • 您已经注意到字典可以变异,但您知道您是not guaranteed the same order of keys when you enumerate a dictionary repeatedly吗?你真正想做什么?您可以制作字典的不可变副本并将其(它是枚举数)保留在某处吗?
  • 您可以尝试将键放入数组中,并对其进行迭代。与地图(或者实际上是 Obj-C / Swift 语言中的字典)相比,数组是有序的,因此您可以保存和恢复您的位置。
  • 我真的尝试保存迭代器并稍后从保存的点继续。我的目标是在字典上进行迭代,如果字典没有改变,则具有相同的枚举顺序。高效。
  • @choofie,我觉得每次在字典里搜索有点贵。
  • @Boris 您不需要执行搜索。 C++ map 和 Objective-C NSDictionary 的主要区别在于它是无序的。你只需要一个有序的序列来保持你的字典的键是有序的。然后,如果您想遍历您的 NSMutableDictionray,基本上您将改为遍历键 NSArray,并使用实际迭代的键来查找您的字典。

标签: objective-c cocoa nsdictionary


【解决方案1】:

尝试使用字典的键创建一个有序数组并对其进行迭代。您可以随时从 for 循环中跳出。 currentIteration var 确保存储最后一次迭代,以便下次继续使用。

NSMutableDictionary *dictionary = @{@"key1" : @"value1", @"key2" : @"value2", @"key3" : @"value3"};
NSArray *keys = dictionary.allKeys;
int currentIteration = 0;

for (int i = 0; i < keys.count; i++) {
    currentIteration = i;
    NSObject *value = dictionary[keys[i]];
    NSLog(@"%@", value);
}

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多