在迭代 NSDictionary 时保持顺序
Maintaining the order while iterating a NSDictionary
我有一个 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 等,但是当我迭代它并保存它时,顺序正在改变,我如何维护顺序?
NSMutableDictionary
未排序。您无法保证键的顺序,因为 NSDictionary
不会尝试保留任何特定的顺序。要以特定顺序遍历字典,您必须按所需顺序创建 NSArray
键,然后对其进行迭代并获取相应的值。
NSDictionary 是一个无序集合。说 "the order I added them" 没有任何意义。如果您想按特定顺序访问键,那么您要么必须在字典旁边存储一个数组,要么获取键然后对它们进行排序并使用它来按该顺序访问值。
NSMutableDictionary
中没有顺序如果您想使用它,您可以通过将键存储到 NSArray
中来使用它,然后迭代它并获取您想要使用的相关值。希望它对你有用:)
我有一个 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 等,但是当我迭代它并保存它时,顺序正在改变,我如何维护顺序?
NSMutableDictionary
未排序。您无法保证键的顺序,因为 NSDictionary
不会尝试保留任何特定的顺序。要以特定顺序遍历字典,您必须按所需顺序创建 NSArray
键,然后对其进行迭代并获取相应的值。
NSDictionary 是一个无序集合。说 "the order I added them" 没有任何意义。如果您想按特定顺序访问键,那么您要么必须在字典旁边存储一个数组,要么获取键然后对它们进行排序并使用它来按该顺序访问值。
NSMutableDictionary
中没有顺序如果您想使用它,您可以通过将键存储到 NSArray
中来使用它,然后迭代它并获取您想要使用的相关值。希望它对你有用:)