Ruby 1.8: Hash # sort no devuelve hash sino array (¿mejor manera de hacer esto?)

StackOverflow https://stackoverflow.com/questions/489139

  •  20-08-2019
  •  | 
  •  

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?

¿Fue útil?

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
scroll top