[英]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.