Я не знаю, правильно ли я понимаю логику, но рассмотрим , используя вместо этого хэш массива:
h = {}
10.times do |x|
rand1 = rand(2)
if rand1 == 0
if h.has_key? drop1.item
drop1.amount += 1
h[drop1.item] = drop1.amount
else
h[drop1.item] = drop1.amount
end
elsif rand1 == 1
if h.has_key? drop2.item
drop2.amount += 60
h[drop2.item] = drop2.amount
else
h[drop2.item] = drop2.amount
end
end
end
Для проверки результата:
p h
p drop1.amount
p drop2.amount
Другой вариант, если он для вас жизнеспособен,
позвольте классу выполнить работу , определив его так:
class Drop
attr_accessor :item, :price, :amount
def initialize(item:'no_name', price: 0, amount: 0)
@item = item
@price = price
@amount = amount
@counts = 0
@increment = amount
end
def count!
@counts += 1
@amount += @increment if @counts > 1
end
end
Затем сохраните экземпляры в массиве:
drops = []
drops << Drop.new(item: 'item1', price: 2247, amount: 1)
drops << Drop.new(item: 'item2', price: 4401, amount: 60)
Запустить случайную выборку массива drops
:
10.times do |x|
drops.sample.count!
end
Проверить результат:
drops.each do |drop|
puts "#{drop.item} - #{drop.amount} - #{drop.price}"
end
Вы также можете определить reset
метод, который восстанавливает amount
и counts
к исходному значению:
def reset
@amount = @increment
@count = 0
end