Ruby 1.8: Hash # sort pas retourner hash mais tableau (meilleure façon de faire cela?)

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

  •  20-08-2019
  •  | 
  •  

Question

Dans certains scénarios de Ruby 1.8. Si j'ai 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 ',' 

ma solution consiste à créer la méthode to_hash pour la classe Array.

class Array
  def to_hash(&block)
    Hash[*self.collect { |k, v|
      [k, v]
    }.flatten]
  end
end

Je peux alors faire ce qui suit:

sorted_by_values.to_hash.keys.join ','

Y a-t-il une meilleure façon de faire cela?

Était-ce utile?

La solution

Les hachages ne sont pas ordonnés par définition. Il ne peut y avoir rien de tel qu'un hachage trié. Votre meilleur pari est probablement d’extraire les clés du tableau trié en utilisant collect, puis de faire une jointure sur le résultat

sortedByValues = foo.sort {|a, b| a[1] <==> b[1]}
sortedByValues.collect { |a| a[0] }.join ','
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top