Я бы перезапустил вашу проблему и рассмотрел бы что-то вроде следующего:
GROCERY = {
apples: 2.30,
quinoa: 2.75,
peppers: 3.00,
milk: 1.80,
butter: 3.25
}
def add_grocery_item(bag, item, qty)
bag.push([item, qty, GROCERY[item]])
end
if __FILE__ == $0
grocery_bag = []
add_grocery_item(grocery_bag, :apples, 10)
add_grocery_item(grocery_bag, :quinoa, 1)
add_grocery_item(grocery_bag, :milk, 2)
add_grocery_item(grocery_bag, :butter, 3)
add_grocery_item(grocery_bag, :apples, 7)
add_grocery_item(grocery_bag, :quinoa, 6)
add_grocery_item(grocery_bag, :milk, 6)
add_grocery_item(grocery_bag, :butter, 9)
p grocery_bag.reduce(Hash.new(0)){|acc, e| acc[e[0]] += e[1] * e[2]; acc}
end
Это всего лишь отправная точка для рассмотрения.