2010-03-16 10 views
2

J'ai le hash de pays suivant;Trier par les valeurs de la table de hachage - Ruby

COUNTRIES = { 
    'Albania' => 'AL', 
    'Austria' => 'AT', 
    'Belgium' => 'BE', 
    'Bulgaria' => 'BG', 
    ..... 
    } 

Maintenant, quand je sortie le hachage les valeurs ne sont pas classés par ordre alphabétique AL, AT, BE, BG .... mais dans un ordre non-sens (au moins pour moi)

Comment puis-je produire le hachage ayant les valeurs ordonnées alphabétiquement?

Répondre

7

Les hachages n'ont pas d'ordre interne. Vous ne pouvez pas trier un hachage sur place, mais vous pouvez utiliser la méthode Hash#sort pour générer un tableau trié de clés et de valeurs.

Vous pouvez combiner ceci avec un Array#each pour parcourir le Hash dans l'ordre désiré.

Ainsi, un exemple serait:

COUNTRIES = { 
    'Albania' => 'AL', 
    'Austria' => 'AT', 
    'Belgium' => 'BE', 
    'Bulgaria' => 'BG', 
    } 

COUNTRIES.sort {|a,b| a[1] <=> b[1]}.each{ |country| print country[0],"\n" } 
+0

Merci @Dancrumb – Adnan

8

En utilisant sort_by la chose devient un peu plus concise. Plus met automatiquement ajoute le "\ n":

COUNTRIES.sort_by { |k, v| v }.each { |country| puts country[0] }