Как сравнить значение в двух хешах?
cart = [
{ type: :soccer_ball, qty: 2 },
{ type: :tennis_ball, qty: 3 }
]
inventory = {
soccer_ball: { available: 3, price_per_item: 100 },
tennis_ball: { available: 5, price_per_item: 30 },
golf_ball: { available: 5, price_per_item: 5 }
}
socer_qty = cart[0][:qty]
tennis_qty = cart[1][:qty]
socer_price = inventory[:soccer_ball][:price_per_item]
tennis_price = inventory[:tennis_ball][:price_per_item]
yy = inventory[:tennis_ball][:available]
zz = inventory[:soccer_ball][:available]
if zz >= socer_qty && yy >= tennis_qty
total = socer_qty * socer_price + tennis_qty * tennis_price
else
puts " tovara net na sklade"
end
p total
Ответы (1 шт):
Автор решения: Василиса
→ Ссылка
Ваш код рабочий, но даже с тремя позициями в inventory уже сложно читаемый. И совершенно не масштабируемый - представьте себе, что появилась хотя бы сотня позиций...
Всё станет гораздо проще, если просто перебрать содержимое корзины и выяснить для каждого товара, есть ли он на складе в нужном количестве, и сколько он стоит.
def handle_order
total_price = 0
cart.each do |item|
item_type = item[:type]
return "Not enough #{item_type} items in stock" if item[:qty] > inventory[item_type][:available]
total_price += (item[:qty] * inventory[item_type][:price_per_item])
end
"Total price for your cart: #{total_price}"
end