我有一个散列,其中每个值都是一个数组,并且无法根据需要更新数组中的位置1。我的代码如下。
newOrderItem = STDIN.gets.chomp
while newOrderItem != "q"
if items.has_key?(newOrderItem) == true
print "How many #{newOrderItem}'s would you like?"
qty = STDIN.gets.chomp
items[newOrderItem[1]] = items[newOrderItem[1]] + qty
puts "Please enter the item you whish to order. Enter \"q\" when you have finished."
newOrderItem = STDIN.gets.chomp
else
puts "Sorry, #{newOrderItem} is not on our menu. Please try again."
newOrderItem = STDIN.gets.chomp
end
end
我认为我遇到麻烦的行是" items [newOrderItem [1]] = items [newOrderItem [1]] + qty"当我运行这个程序时,我在加号上得到一个未定义的方法错误。我想要做的是将数量添加到该键的数组中的当前值(总是一个int)。我的哈希看起来像这样。
items = { 'Hamburger' => [3.65, 0], 'Fries' => [1.00, 0], 'Drink' => [1.49, 0], 'Shake' => [2.25, 0], 'Chicken Nuggets' => [0.99, 0] }
感谢您的帮助!
答案 0 :(得分:2)
现在你得到一个未定义的方法错误,因为items[newOrderItem[1]]
返回nil
。
要访问哈希,您应该使用items[newOrderItem][1]
来查找键newOrderItem
,然后找到数组并返回数组索引1处的元素。
当你在items[newOrderItem[1]] + qty
添加qty
时仍然是一个字符串。你必须首先将其转换为数字类型,如果你想要转换,请使用Integer(qty)
它为非十进制值,如果需要十进制数值,则为float(qty)
。所以你会有这样的事情items[newOrderItem[1]] + Integer(qty)
。
例如:
2.0.0-p353 :019 > items = { 'Hamburger' => [3.65, 0], 'Fries' => [1.00, 0], 'Drink' => [1.49, 0], 'Shake' => [2.25, 0], 'Chicken Nuggets' => [0.99, 0] }
=> {"Hamburger"=>[3.65, 0], "Fries"=>[1.0, 0], "Drink"=>[1.49, 0], "Shake"=>[2.25, 0], "Chicken Nuggets"=>[0.99, 0]}
2.0.0-p353 :020 > items['Hamburger'][1]
=> 0