Предположим, у меня есть этот массивГруппировка с помощью элемента в хэш
x=[{:shipping_id=>2, :fsn=>"ab", :price=>300, :quantity=>1},
{:shipping_id=>3, :fsn=>"abc",:price=>500, :quantity=>2},
{:shipping_id=>2, :fsn=>"abcd",:price=>300,:quantity=>3},
{:shipping_id=>4, :fsn=>"abx", :price=>600,:quantity=>1},
{:shipping_id=>3, :fsn=>"abb", :price=>400,:quantity=>1}]
Я хочу, чтобы сгруппировать его по уникальной доставки ид, но в этом случае давайте просто группу по shipping_id = 2
Так что я x.select! {|y| y[:shipping_id]==2}
, который дает мне
[{:shipping_id=>2, :fsn=>"ab",:price=>300,:quantity=>1}, {:shipping_id=>2, :fsn=>"abcd",:price=>300,:quantity=>3}]
Но проблема, я хочу, чтобы мой результат в этом виде
x={:shipping_id=>[2,2],:fsn=>["ab","abcd"],:price=>[300,300],:quantity=>[1,3]}
Что мне делать? Я могу сделать это в нескольких строках, но есть ли оптимизированный способ для этого?
UPDATE -: Окончательный рабочий раствор (Мое решение) -
Контроллер
new_params={}
order_hash.each do |row|
new_params=row.convert_to_params(new_params)
end
params.merge!(new_params)
Модель
def convert_to_params(new_params)
item=self.instance_values.symbolize_keys
item.each do |k, v|
new_params[k].nil? ? new_params[k]=[v] : new_params[k].push(v)
end
return new_params
end
Это дало мне мой желаемый результат
Я не согласен с тем, что это слишком локализовано. Я не думаю, что этот вопрос должен был быть закрыт. Существует общий алгоритм группировки, лежащий в основе вопроса, который может быть полезен другим. –
@ JimStewart - Я согласен, я действительно не думаю, что это был общий вопрос. В любом случае, мне нравится то, что мое решение довольно аккуратно. –