Сортировать хэш рельсов по массиву элементов - PullRequest
2 голосов
/ 30 марта 2011

У меня есть такой массив:

['one','three','two','four']

У меня есть такой массив хэшей:

[{'three' => {..some data here..} }, {'two' => {..some data here..} }, {:total => some_total }] # etc...

Я хочу отсортировать массив хэшей по первому массиву.Я знаю, что могу сделать:

array_of_hashes.sort_by{|k,v| k.to_s} to sort them and it will sort by the key 

(и .to_s для преобразования: всего в строку)

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

Редактировать:

Я ошибся в том, как это настроено, на самом деле это так:

{'one' => {:total => 1, :some_other_value => 5}, 'two' => {:total => 2, :some_other_value => 3} }

Если мне нужно задать это в новом вопросе, просто дайте мне знать, и я сделаю это.

Спасибо

Ответы [ 2 ]

6 голосов
/ 31 марта 2011

аналогично ответу ctcherry, но с использованием sort_by.

sort_arr = ['one','three','two','four']
hash_arr = [{'three' => {..some data here..} }, {'two' => {..some data here..} }]

hash_arr.sort_by { |h| sort_arr.index(h.keys.first) }
0 голосов
/ 30 марта 2011

Метод Array index является вашим другом в этом случае:

sort_list = ['one','three','two','four']

data_list = [{'three' => { :test => 3 } }, {'two' => { :test => 2 } },  {'one' => { :test => 1 } },  {'four' => { :test => 4 } }]

puts data_list.sort { |a,b|
 sort_list.index(a.keys.first) <=> sort_list.index(b.keys.first)
}.inspect

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

[{"one"=>{:test=>1}}, {"three"=>{:test=>3}}, {"two"=>{:test=>2}}, {"four"=>{:test=>4}}]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...