2011-08-12 18 views
5

Rubyで使用しているハッシュの挿入順序を維持する方法を探しています。私のデータはデータベースから来て、私が望むようにすでにグループ化/注文されていますが、Rubyは私のバージョン1.8.4でHashsの保守注文を保証しません。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 = [] 

挿入時:

挿入順に反復する
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

ああ、私はそれが素晴らしい動作するはずです参照してください、ありがとう! –

14

ルビー(2007年12月リリース)バージョン1.9は、ハッシュの順序を維持するので(参照:http://www.igvita.com/2009/02/04/ruby-19-internals-ordered-hash/)を

また、orderedhashと呼ばれるこのための宝石があります古いルビーのために。

+0

hash.mergeなどのようなものはそれを破るでしょう、ちょっとした例です。 –

関連する問題