2017-01-19 17 views
0

Я пытаюсь создать ответ, который позволит пользователю ввести ключ и значение инвентаря, чтобы вычесть из инвентаря, который уже существует. Поэтому, если в начале инвентаря есть 10 яблок, и я отвечаю, говоря, что я продаю 7 яблок, оставшаяся часть хеша должна быть представлена ​​в виде 3 яблок.Ruby Hash: Вычитаемые количества

Я новичок и немного потерял, поэтому любое объяснение было бы полезно. Спасибо!

@inventory = {"apples" => 10, "bananas" => 10, "crackers" => 10, "breads" => 10} 

def sell_inventory 
    puts "What food are we selling today?"  
    product = gets.chomp.downcase   
    puts "How many #{product} are we selling today?"   
    quantity = gets.to_i   
    @inventory.delete(product, quantity)   
end 

ответ

4
@inventory = { "apples" => 10, "bananas" => 10, "crackers" => 10, "breads" => 10 } 

def sell_inventory 
    puts "What food are we selling today?" 
    product = gets.chomp.downcase 

    puts "How many #{product} are we selling today?" 
    quantity = gets.to_i 

    if @inventory.key?(product) 
    @inventory[product] -= quantity 
    @inventory[product] = 0 if @inventory[product] < 0 
    else 
    puts "No inventory product: #{product}" 
    end 
end 

Сначала я проверить product является ли продукт инвентаризации с Hash#key?. В противном случае я распечатаю сообщение об ошибке. Затем я вычитаю количество. Последнее, что я проверяю, общее количество не может быть отрицательным.

Hash.delete, который вы пробовали, удалит пару ключ-значение из хэша и вернет значение. Пример:

@inventory.delete("apples") 
# => 8 
@inventory 
# => {"bananas"=>10, "crackers"=>10, "breads"=>10} 
+0

Thank Simon Fromme! Это работает отлично! – Ian