在迭代 NSDictionary 时保持顺序
Posted
技术标签:
【中文标题】在迭代 NSDictionary 时保持顺序【英文标题】:Maintaining the order while iterating a NSDictionary 【发布时间】:2016-04-27 07:20:05 【问题描述】:我有一个 NSDictionary,它正在迭代并将数据保存到核心数据,如下所示,
NSDictionary *details = [valueDict objectForKey:@"shipment_master"];
for (NSDictionary *response in details)
NSManagedObjectContext *context = [self managedObjectContext];
// remove all rows
[context performBlockAndWait:^
// add new row(s)
NSManagedObject *master = [NSEntityDescription insertNewObjectForEntityForName:@"ShipmentMaster" inManagedObjectContext:context];
NSError *error;
[master setValue:[details objectForKey:response] forKey:@"values"];
// save MOC
if ([context hasChanges])
(void)[context save:&error];
];
问题是在循环 nsdictionary 时更改了顺序。例如 a 出现在 b 然后 c , d 等在字典中,但是当我迭代它并保存它时,顺序正在改变,我怎样才能保持顺序?
【问题讨论】:
字典中没有顺序...你需要元组数组 你能参考我的代码解释一下吗?谢谢 NSDictionary with ordered keys的可能重复 NSDictionary 将其键存储在哈希表中,该哈希表在设计上是无序的。这种缺乏顺序是哈希表存储的基础,所以是的。 【参考方案1】:NSMutableDictionary
未排序。您无法保证键的顺序,因为NSDictionary
不会尝试保留任何特定的顺序。要以特定顺序遍历字典,您必须按照您想要的顺序创建一个 NSArray
键,然后对其进行迭代并获取相应的值。
【讨论】:
【参考方案2】:NSDictionary 是一个无序的集合。说“我添加它们的顺序”没有任何意义。如果您想按特定顺序访问键,那么您要么必须在字典旁边存储一个数组,要么获取键然后对它们进行排序并使用它来按该顺序访问值。
【讨论】:
【参考方案3】:NSMutableDictionary
中没有顺序如果你想使用它,你可以通过将键存储到 NSArray
中来使用它,然后迭代它并获取你想要使用的相关值。希望它对你有用:)
【讨论】:
以上是关于在迭代 NSDictionary 时保持顺序的主要内容,如果未能解决你的问题,请参考以下文章
如何在 NSMutableArray 中迭代时删除 NSDictionary [重复]