Ruby 1.8: Hash # sort no devuelve hash sino array (¿mejor manera de hacer esto?)
Pregunta
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 crear 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
Entonces puedo hacer lo siguiente:
sorted_by_values.to_hash.keys.join ','
¿Hay una mejor manera de hacer esto?
Solución
Los hashes no están ordenados por definición. No puede haber un Hash ordenado. Su mejor opción es probablemente extraer las claves de la matriz ordenada mediante recoger y luego unir el resultado
sortedByValues = foo.sort {|a, b| a[1] <==> b[1]}
sortedByValues.collect { |a| a[0] }.join ','
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow