Лучший способ получить значения хеш-функции, упорядоченные по соответствующим ключам? (Рубин) - PullRequest
1 голос
/ 24 апреля 2010

Вот что я делаю в банкомате:

test = {
  'd' => 20,
  'b' => 40,
  'c' => 30,
  'a' => 50,
  'e' => 10
}

f = []
test.to_a.sort.each do |e|
  f << e[1]
end
puts f.join(' ')

Выходы:

50 40 30 20 10

Есть ли более эффективный / краткий / лучший способ сделать это? И прежде чем кто-то скажет, нет, я не могу использовать массив. : Р

РЕДАКТИРОВАТЬ Извините, отправил неправильный код.

Ответы [ 3 ]

4 голосов
/ 24 апреля 2010

В заголовке вы упоминаете, что хотите получить значения массива, отсортированные по их соответствующим ключам.Но в вашем примере вы на самом деле просто сортируете значения независимо от ключей.

Если это то, что вам нужно, просто используйте:

test.values.sort

Но если вы хотите отсортировать значения на основена клавишах используйте это:

test.keys.sort.collect {|k| test[k]}
2 голосов
/ 24 апреля 2010
test.values.sort.join(' ')
0 голосов
/ 24 апреля 2010
test.sort_by(&:first).map(&:last).join(' ')

К сожалению, в Ruby нет класса для представления Hash записей (пар ключ-значение), но вместо этого используется двухэлементный массив. Если бы в Ruby был выделенный класс для пар ключ-значение, это было бы гораздо менее непрозрачно:

test.sort_by(&:key).map(&:value).join(' ')

И, конечно, тот факт, что Enumerable#sort_by возвращает Array, также весьма прискорбен. Если бы он возвратил SortedMap или что-то подобное, это было бы еще лучше:

test.sort_by(&:key).values.join(' ')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...