Ruby如何在哈希中为数组赋值

时间:2014-03-28 19:48:51

标签: ruby arrays hash

我有一个散列,其中每个值都是一个数组,并且无法根据需要更新数组中的位置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]  } 

感谢您的帮助!

1 个答案:

答案 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