按哈希表中的值排序 - Ruby

Adn*_*nan 2 ruby ruby-on-rails hashtable

我有以下国家/地区;

COUNTRIES = {
  'Albania' => 'AL', 
  'Austria' => 'AT',
  'Belgium' => 'BE',
  'Bulgaria' => 'BG',
   .....
  }
Run Code Online (Sandbox Code Playgroud)

现在,当我输出哈希时,值不按字母顺序排列AL,AT,BE,BG ....而是以无意义的顺序排序(至少对我而言)

如何输出具有按字母顺序排序的值的哈希?

Mic*_*ohl 8

使用sort_by,整个过程变得更加简洁.Plus puts会自动添加"\n":

COUNTRIES.sort_by { |k, v| v }.each { |country| puts country[0] }
Run Code Online (Sandbox Code Playgroud)


Dan*_*umb 7

哈希没有内部订购.您无法对哈希进行排序,但您可以使用哈希#排序方法生成排序的键和值数组.

您可以将它与Array#相结合,以按所需顺序迭代Hash.

所以,一个例子是:

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

COUNTRIES.sort {|a,b| a[1] <=> b[1]}.each{ |country| print country[0],"\n" }
Run Code Online (Sandbox Code Playgroud)