2011-08-12 94 views
5

我正在寻找一种方法来维护我在Ruby中使用的哈希的插入顺序。我的数据来自数据库,并已按照我的需要进行了分组/排序,但Ruby并不保证我的版本1.8.4中的哈希保持顺序。Ruby维护哈希插入顺序

有没有解决方法?如果没有,我可以创建自定义比较器吗?

这里是哈希:

{ 
"February"=>[0.5667, 14.6834, 79.7666, 261.8668, 342.1167, 723.517], 
"March"=>[0.0, 26.4667, 554.45, 681.3164, 2376.0668, 10353.0358], 
"May"=>[2.75, 34.6666, 342.1831, 1331.8999, 1589.617, 9282.9662], 
"July"=>[1.9, 2.3666, 59.45, 302.1501, 554.1652, 5195.0839], 
"June"=>[0.15, 24.2166, 244.1498, 335.6834, 536.067, 1498.949], 
"August"=>[0.0, 0.4, 9.3668, 30.7164, 67.7504, 162.0337], 
"April"=>[0.0, 8.3, 68.9331, 357.9168, 815.9662, 2870.217] 
} 

任何想法将是巨大的, 感谢

回答

7

你可以保持在含有序

最初的键面的列表:

hash = {} 
keys = [] 

on insert:

def insert(key, value) 
    keys << key unless hash[key] 
    hash[key] = value 
end 

按插入顺序遍历:

for key in keys do 
    puts key, hash[key] 
end 
+0

如果我按排序顺序保存了一个包含键的列表,我怎么可以用它来排序哈希?逐步通过每对并交换不匹配? –

+0

编辑澄清 –

+0

哦,我明白了,这应该很好,谢谢! –