ruby hash ruby-1.8

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 '',''