Pharo中Dictionary的排序规则是什么?为何添加顺序与输出顺序不符?
Pharo Dictionary 的元素顺序问题解答
这是特性,绝对不是Bug。
Pharo 里的 Dictionary 是基于哈希表实现的,元素的存储位置由键的哈希值计算决定,和插入顺序无关。你看到的“混乱”顺序,就是哈希表按哈希值分配存储位置后的正常结果。
至于每次创建相同数据的 Dictionary 顺序都一致,原因很简单:同一个键的哈希值是固定的,哈希表的存储逻辑也没有变化,所以每次存储的位置都相同,遍历出来的顺序自然就一致了。
如果需要保留插入顺序的字典,Pharo 提供了 OrderedDictionary 实现,替换后就能按插入顺序返回元素:
| d | d := OrderedDictionary new: 10. 1 to: 10 do: [ :i | d add: i -> (i + 9 printStringBase: 20) ]. d
运行这段代码,得到的结果会严格按照插入顺序排列:
1 -> A
2 -> B
3 -> C
4 -> D
5 -> E
6 -> F
7 -> G
8 -> H
9 -> I
10 -> J
内容的提问来源于stack exchange,提问作者siery
相关产品推荐
相关产品推荐

