字典里的 keys 如何按原始顺序取出?

2015-07-29 18:22:57 +08:00
 tigerZhang
例如:
有NSDictionary *dict123 = @{@"中文":@[@{@"123":@"123"}],
@"英文":@[@{@"123":@"123"},@{@"123":@"123"}],
@"法文":@[@{@"123":@"123"},@{@"123":@"123"}]};
NSArray *keyArrays = dict123.allKeys;

我希望keyArrays顺序为(中文,英文,法文),但是实际通过allKeys方法取到的顺序是[法文,英文,中文],想问问有什么办法可以取到字典原始key的排序顺序吗?
4651 次点击
所在节点    iDev
5 条回复
learnshare
2015-07-29 18:42:39 +08:00
字典是无序的,你得考虑用数组之类的来存储,或者给每个值加一些标记,来标注其 index
raingolee
2015-07-29 20:02:46 +08:00
在stackoverflow看过

python

import collections

dict = {'jack':12, 'adam':'23', 'hook':'34'}
od = collections.OrderedDict(sorted(dict.items()))

print od
----------
output is:
OrderedDict([('adam', '23'), ('hook', '34'), ('jack', 12)])
wezzard
2015-07-29 20:12:41 +08:00
字典通过对 key 的 hash 值进行 book keeping 来方便使用二分搜索以加速查字典的速度,说是无序的还是有点不严谨,应该是按 key 的 hash 值进行有序/降序排列。
wezzard
2015-07-29 20:13:37 +08:00
一楼说的是对的,你要保存存入的顺序,只能使用数组。
xi_lin
2015-07-31 12:56:12 +08:00
iOS里没有现成的类似LinkedHashMap、TreeMap之类的有序字典。用数组记吧。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/209346

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX