繁体   English   中英

以特定顺序将Objective-c NSDictionary转换为NSMutableArray

[英]Objective-c NSDictionary to NSMutableArray in certain order

所以我有这样的NSDictionary:

NSDictionary *productionSchedule = [[[NSMutableDictionary alloc]initWithDictionary:[[areaData GetProductionScheduleData:communityDesc] objectForKey:@"Root"]] autorelease];

NSDictionary的数据来自API,并且由于NSDictionary不进行排序,因此NSDictionary中API中数据的顺序不同,所以现在我尝试将NSDictionary的密钥放入NSMutableArray中。处理订单。 在我的NSDictionary中,我有一个名为SortOrder的值,并且尝试基于此值SortOrder将NSDictionary中的数据放入NSMutableArray(我有大约389个项目,而SortOrder的范围是0-389)我该怎么做?

我有此屏幕截图,它将向您显示我的数据是什么样的:

在此处输入图片说明

我想做的是输入密钥“ V3C0183”,但将其作为第82个项目(在此之前有81个项目)

我假设我必须像这样做一个foreach循环:

NSMutableArray *prodSchedSortedKeys

for(int i = 0;i<[productionSchedule count];i++)
{

[prodSchedSortedKeys addObject: ? ];

}

我只是不知道下一步将基于排序顺序添加对象。...请帮助。

NSDictionary *dic = //your dictionary;

NSArray<NSDictionary *> *values = dic.allValues;
[values sortedArrayUsingComparator:^NSComparisonResult(id  _Nonnull obj1, id  _Nonnull obj2) {
    return [obj1[@"SortOrder"] integerValue] > [obj2[@"SortOrder"] integerValue];
}];

现在,该dic已排序。

但这不是解决此问题的最佳方法。 而是应该对服务器的数据进行排序,例如“ VC31083”之类的键也应该在键值对中。

Edit1: sortedArrayUsingComparator:用于普通的数组排序,如果内容太大,性能将不会很好。 特别是在此比较中,它会执行其他操作:从字典中获取值,将NSString转换为int,然后进行比较。 您可以登录以查看在数据处理上花费了多少时间。

NSMutableDictionary/NSDictionary无法做到这一点。 看一下Matt Mattaglaghers的OrderedDictionary

还请看一下此答案: 获取NSDictionary键按其各自的值排序

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM