【发布时间】:2017-08-02 23:16:30
【问题描述】:
假设我有这个 NSDictionary:
NSDictionary *d = @{
@"124":@[@"-40",@"1489365614.248664"],
@"130":@[@"-40",@"1489365604.258358"],
@"134":@[@"-40",@"1489365615.49739"],
@"53":@[@"-40",@"1489365610.502131"],
@"57":@[@"-40",@"1489365609.253352"],
@"73":@[@"-40",@"1489365608.004844"],
@"89":@[@"-44",@"1489365611.750874"],
@"91":@[@"-64",@"1489365606.755874"],
@"93":@[@"-45",@"1489365605.507149"],
@"96":@[@"-45",@"1489365613.000054"]
};
我可以像这样按数组的第一个值对其进行排序:
NSArray *sortedKeys = [d keysSortedByValueUsingComparator: ^(NSArray *obj1, NSArray *obj2) {
return (NSComparisonResult)[obj1[0] compare:obj2[0]];
}];
并且会返回这个数组:
@[73,134,53,124,130,57,89,96,93,91]
翻译成字典是这样的:
@{
@"73": @[@"-40",@"1489365608.004844"],
@"134":@[@"-40",@"1489365615.49739"],
@"53": @[@"-40",@"1489365610.502131"],
@"124":@[@"-40",@"1489365614.248664"],
@"130":@[@"-40",@"1489365604.258358"],
@"57": @[@"-40",@"1489365609.253352"],
@"89": @[@"-44",@"1489365611.750874"],
@"96": @[@"-45",@"1489365613.000054"],
@"93": @[@"-45",@"1489365605.507149"],
@"91": @[@"-64",@"1489365606.755874"]
};
现在,正如您可能想象的那样,字典中数组的第二个值是时间戳。如果第一个值相等,我想按这个时间戳排序,这样我就可以先得到最新的。
如果我能够做到这一点,我应该得到一个这样的数组:
@[134,124,53,57,73,130,89,96,93,91]
这会将字典翻译成这样:
@{
@"134":@[@"-40",@"1489365615.49739"],
@"124":@[@"-40",@"1489365614.248664"],
@"53": @[@"-40",@"1489365610.502131"],
@"57": @[@"-40",@"1489365609.253352"],
@"73": @[@"-40",@"1489365608.004844"],
@"130":@[@"-40",@"1489365604.258358"],
@"89": @[@"-44",@"1489365611.750874"],
@"96": @[@"-45",@"1489365613.000054"],
@"93": @[@"-45",@"1489365605.507149"],
@"91": @[@"-64",@"1489365606.755874"]
};
希望这是有道理的,有人有答案。 谢谢
【问题讨论】:
-
字典不可排序。
-
@rmaddy,标题中用词不当。 OP 想要一个排序后的键数组。
-
我将改写标题。对此感到抱歉
-
实际上,我不知道该怎么说。 @danh 有什么建议吗?
-
我通过编辑标题提出了一个建议
标签: ios objective-c arrays sorting dictionary