在迭代 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 中来使用它,然后迭代它并获取您想要使用的相关值。希望它对你有用:)