2011-08-12 9 views
5

Estoy buscando una manera de mantener el orden de insertar un hash que estoy usando en Ruby. Mis datos provienen de una base de datos y ya están agrupados/ordenados de la manera que yo quiero, pero Ruby no garantiza el mantenimiento del orden en Hashs en mi versión 1.8.4.Ruby mantener el orden de inserción del hash

¿Hay alguna solución para esto? Si no, ¿hay alguna manera de que yo pueda crear un comparador personalizado?

Aquí es el Hash:

{ 
"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] 
} 

Cualquier idea sería grande, Gracias

Respuesta

7

Puede mantener una lista en el lado que contiene las claves en orden clasificado

inicialmente:

hash = {} 
keys = [] 

en la inserción:

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

para iterar con el fin de inserción:

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

Si guardo una lista que contiene las claves en orden, ¿cómo podría usar eso para ordenar el Hash? ¿Paso por cada par e intercambia una discrepancia? –

+0

Editado con la aclaración –

+0

Oh veo, eso debería funcionar muy bien, ¡Gracias! –

Cuestiones relacionadas