Сортировать по значениям из хеш-таблицы - Ruby - PullRequest
2 голосов
/ 16 марта 2010

У меня есть следующий хэш стран;

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

Теперь, когда я вывожу хеш, значения упорядочены не в алфавитном порядке AL, AT, BE, BG .... а в бессмысленном порядке (по крайней мере, для меня)

Как вывести хеш, имеющий значения в алфавитном порядке?

Ответы [ 2 ]

8 голосов
/ 16 марта 2010

Используя sort_by, все становится немного более лаконичным. Плюс пут автоматически добавляет "\ n":

COUNTRIES.sort_by { |k, v| v }.each { |country| puts country[0] }
7 голосов
/ 16 марта 2010

Хэши не имеют внутреннего порядка. Вы не можете отсортировать хэш на месте, но вы можете использовать метод Hash # sort для генерации отсортированного массива ключей и значений.

Вы можете комбинировать это с Array # каждый , чтобы перебирать хэш в нужном вам порядке.

Итак, пример будет:

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

COUNTRIES.sort {|a,b| a[1] <=> b[1]}.each{ |country| print country[0],"\n" }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...