按哈希表中的值排序 - Ruby

时间:2010-03-16 14:13:14

标签: ruby-on-rails ruby hashtable

我有以下国家哈希值;

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

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

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

2 个答案:

答案 0 :(得分:8)

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

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

答案 1 :(得分:7)

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

您可以将其与Array#each结合使用,以按所需顺序迭代哈希。

所以,一个例子是:

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

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