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

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

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

共收到 14 条回复

没有,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

ruby 2.2.3

啊哈,我理解你意思了,你想要 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吧……

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