新手问题 请问 ruby 标准库中有 ordered hash 这种容器吗

lilijreey · 2018年08月12日 · 最后由 msg7086 回复于 2018年08月14日 · 2129 次阅读

找了一下好像没有找到,只有 SortedSet,为何没有有序字典类?这个是很常用的容器,不应该没有啊。

没有,ruby 的字典默认是有序的(但是没规范...看到 SO 上有回答者说甚至没有对这个顺序测试)

所以想要可靠可以选择用外部的 https://www.rubydoc.info/docs/rails/4.1.7/ActiveSupport/OrderedHash

Rei 回复

刚试了一下 2.4 的 hash 不是有序的。

lilijreey 回复

测试方法是怎么样的?

irb 中定义 a = {3 =>'ook',4 =>'aa', 1=>'xx'} 然后 for (k,v) in a puts k end

啊哈,我理解你意思了,你想要 key 按顺序排列,Ruby Hash 是按插入序。

迭代的时候手工排序可以吗?

hash.sort.to_h.each do |key, value|
  # ...
end

楼主应该是需要类似 java 的 TreeMap 这个类

我写了个 Triez 可以满足你的需求,而且占空间比一般语言里的词典容器小,速度也更快

存储一个 600M 的 wikipedia 全英文词条列表,只需要 100M 的内存哦,而那些 TreeMap 什么的直接就炸内存了

Rei 回复

是对 key 自动排序,在插入的时候,就是类似与 java 的 TreeMap,c++ 的 map

所以你要找的不是 Ordered Hash 而是 Sorted Hash 吧……

需要 登录 后方可回复, 如果你还没有账号请 注册新账号