Вам нужны они сгруппированы или отсортированы?Если это просто отсортировано, можете ли вы использовать sort_by с полем поиска?
TAGS = {
'General' => 1,
'Fiction' => 2,
'Factual' => 3,
'Food' => 4,
'Other' => 5
}
authors = [
{ name: 'Joe', tag: 'General' },
{ name: 'Sue', tag: 'Fiction' },
{ name: 'Sally', tag: 'Food' },
{ name: 'Oliver', tag: 'Factual' },
{ name: 'Bob', tag: 'Other' },
{ name: 'Billy', tag: 'General' }
]
sorted_authors =
authors.sort_by do |author|
TAGS[author[:tag]] # This would be author.tag in your example
end
puts sorted_authors
Выход
{:name=>"Joe", :tag=>"General"}
{:name=>"Billy", :tag=>"General"}
{:name=>"Sue", :tag=>"Fiction"}
{:name=>"Oliver", :tag=>"Factual"}
{:name=>"Sally", :tag=>"Food"}
{:name=>"Bob", :tag=>"Other"}