Ruby 1.8: Hash#Sort not return hash pero array(¿mejor forma de hacer esto?)
ruby-1.8 (1)
En algún escenario de Ruby 1.8. Si tengo un hash
# k is name, v is order
foo = { "Jim" => 1, "bar" => 1, "joe" => 2}
sorted_by_values = foo.sort {|a, b| a[1] <==> b[1]}
#sorted_by_values is an array of array, it''s no longer a hash!
sorted_by_values.keys.join '',''
Mi solución es hacer que el método to_hash
para la clase Array.
class Array
def to_hash(&block)
Hash[*self.collect { |k, v|
[k, v]
}.flatten]
end
end
Puedo hacer lo siguiente:
sorted_by_values.to_hash.keys.join '',''
¿Hay una mejor manera de hacer esto?
Los hashes están desordenados por definición. No puede existir una Hash clasificada. Su mejor opción es, probablemente, extraer las claves de la matriz ordenada usando collect y luego unirse en el resultado
sortedByValues = foo.sort {|a, b| a[1] <==> b[1]}
sortedByValues.collect { |a| a[0] }.join '',''