Ваш вопрос на самом деле не вопрос Rails, это общий вопрос программирования на Ruby.
Ваше описание не очень понятно, но насколько я понимаю, вы хотите сгруппировать идентификаторы для общих категорий, используя хэш. Существуют различные другие способы сделать это, но это легко понять: *
ary = [
'cat1', {:id => 1},
'cat2', {:id => 2},
'cat1', {:id => 3}
]
hsh = {}
ary.each_slice(2) { |a|
key,category = a
hsh[key] ? hsh[key] << category[:id] : hsh[key] = [category[:id]]
}
hsh # => {"cat1"=>[1, 3], "cat2"=>[2]}
Я использую простой массив с категорией, за которым следует простой хеш, представляющий некоторый экземпляр объекта, потому что он облегчает визуализацию. Если у вас есть более сложный объект, замените записи хеша этими объектами и настройте способ доступа к идентификатору в троичной (?:
) строке.
Использование Enumerable.inject ():
hsh = ary.each_slice(2).inject({}) { |h,a|
key,category = a
h[key] ? h[key] << category[:id] : h[key] = [category[:id]]
h
}
hsh # => {"cat1"=>[1, 3], "cat2"=>[2]}
Enumerable.group_by()
, возможно, может уменьшить его еще больше, но мой мозг угасает.