284 votes

Trier de hachage de hachage de clé, retour en Ruby

Ce serait la meilleure façon de trier un hachage et retourner l’objet de hachage (au lieu de tableau) :

258voto

Mark Thomas Points 19281

En Ruby 2.1, c’est simple :

85voto

Peter Points 38320

Remarque: Ruby >= 1.9.2 a un ordre de la préservation de hachage: l'ordre les touches sont insérés sera l'ordre où ils sont énumérés. Le ci-dessous s'applique aux versions plus anciennes ou vers l'arrière-compatible code.

Il n'y a pas de concept de triés hachage. Donc, non, ce que vous faites n'est pas droit.

Si vous souhaitez un tri pour l'affichage, retourner une chaîne de caractères:

"{" + h.sort.map{|k,v| "#{k.inspect}=>#{v.inspect}"}.join(", ") + "}"

ou, si vous voulez les touches dans l'ordre:

h.keys.sort

ou, si vous voulez accéder aux éléments dans l'ordre:

h.sort.map do |key,value|
  # keys will arrive in order to this block, with their associated value.
end

mais en résumé, il ne fait pas de sens de parler d'un classement de hachage. À partir de la docs, "L'ordre dans lequel vous traversez une table de hachage par clé ou la valeur peut sembler arbitraire, et ne sera pas généralement dans l'ordre d'insertion." Si l'insertion de clés dans un ordre spécifique dans la table de hachage ne va pas aider.

67voto

boulder_ruby Points 6257

J’ai toujours utilisé des . Vous devez encapsuler le sortie avec `` pour le rendre un hachage de sortie, dans le cas contraire, il génère un tableau de tableaux.

question similaire ici : comment trier un hachage de Ruby par valeur numérique ?

15voto

Boris Stitnicky Points 5409

Vous avez donné la meilleure réponse à vous-même dans le po : `` si vous avez envie pour plus de possibilités, voici en place modification du hachage originale pour le rendre triés :

13voto

fl00r Points 41855

Non, ce n’est pas (Ruby 1.9.x)

Pour les hachages grosses différence vont grandir à 10 x et plus

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X