Сортировка хеша по другому хешу, включая информацию о методе заказа - PullRequest
0 голосов
/ 29 июня 2011

Я использую Ruby on Rails 3.0.7, и я хотел бы отсортировать hash с учетом заданного порядка, возвращая отсортированный array или даже новый отсортированный hash.То есть, учитывая следующее hash, скажем, HASH1 (для которого я считаю, что его значения указывают метод порядка от 1 до 4)

{
  :dog  => 3,
  :cat  => 2,
  :pig  => 4,
  :frog => 1
}

Я бы хотел отсортировать остальные hash по ключускажем, HASH2, учитывая порядок, указанный в значениях HASH1

{
  :cat  => 'cat_value',
  :dog  => 'dog_value',
  :frog => 'frog_value',
  :pig  => 'pig_value'
}

Итак, в вышеприведенном случае я должен иметь вывод \ упорядоченный hash, как показано ниже:

{
  :frog => 'frog_value', # Order indicated by ':frog => 1' in the HASH1
  :cat  => 'cat_value',  # Order indicated by ':cat => 2'  in the HASH1
  :dog  => 'dog_value',  # Order indicated by ':dog => 3'  in the HASH1
  :pig  => 'pig_value'   # Order indicated by ':pig => 4'  in the HASH1
}

или

[
  ["frog", 'frog_value'], # Order indicated by ':frog => 1' in the HASH1
  ["cat", 'cat_value'],   # Order indicated by ':cat => 2'  in the HASH1
  ["dog", 'dog_value'],   # Order indicated by ':dog => 3'  in the HASH1
  ["pig", 'pig_value']    # Order indicated by ':pig => 4'  in the HASH1
]

Как я могу это сделать?

1 Ответ

2 голосов
/ 29 июня 2011

Использование Hash#sort_by:

hash = {
  :cat  => [2],
  :frog => [1],
  :pig  => [4],
  :dog  => [3]
}

order = {
  :dog  => 3,
  :cat  => 2,
  :pig  => 4,
  :frog => 1
}

# array of k, v pairs
p sorted_array = hash.sort_by {|k, v| order[k]}
p sorted_hash = Hash[sorted_array]

Выход

[[:frog, [1]], [:cat, [2]], [:dog, [3]], [:pig, [4]]]
{:frog=>[1], :cat=>[2], :dog=>[3], :pig=>[4]}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...