在RUBY中使用哈希的正确方法

在RUBY中使用哈希的正确方法,ruby,hash,Ruby,Hash,我有一个菜单的散列,我需要对这些值进行迭代。每个项目有两种尺寸SML和LRG。让我们假设这是我的散列 fullMenu = [{:item => "pasta", :sml => 550, :lrg => 975}, {:item => "chicken", :sml => 725, :lrg => 1150}, {:item => "shrimp", :sml => 975, :lrg =&

我有一个菜单的散列,我需要对这些值进行迭代。每个项目有两种尺寸
SML
LRG
。让我们假设这是我的
散列

fullMenu = [{:item => "pasta",   :sml => 550, :lrg => 975}, 
            {:item => "chicken", :sml => 725, :lrg => 1150},
            {:item => "shrimp",  :sml => 975, :lrg => 1350}]
现在我想做的是迭代每个
项目/大小-价格
,构建菜单

fullMenu.each do |item, p_sml, p_lrg|
    puts "#{item} Small: $#{p_sml} -or- Large: $#{p_lrg}"
end
我的输出是:

{:item=>"pasta", :sml=>550, :lrg=>975} Small: $ -or- Large: $
{:item=>"chicken", :sml=>725, :lrg=>1150} Small: $ -or- Large: $
{:item=>"shrimp", :sml=>975, :lrg=>1350} Small: $ -or- Large: $

不完全是我想要的。因为没有任何东西被输出。最后,我希望我的
put
put“#{item}小:$#{%.2f”%p#sml/100}-或-Large:$#{.2f”%p#lrg/100}”
以正确显示价格。我错过了什么?这称为多维
散列
还是
数组

可以对哈希值运行
map

2.0.0p247 :010 > fullMenu = [{:item => "pasta",   :sml => 550, :lrg => 975}, 
2.0.0p247 :011 >                 {:item => "chicken", :sml => 725, :lrg => 1150},
2.0.0p247 :012 >                 {:item => "shrimp",  :sml => 975, :lrg => 1350}]
 => [{:item=>"pasta", :sml=>550, :lrg=>975}, {:item=>"chicken", :sml=>725, :lrg=>1150}, {:item=>"shrimp", :sml=>975, :lrg=>1350}] 
2.0.0p247 :013 > fullMenu.map(&:value)
 => [{:item=>"pasta", :sml=>550, :lrg=>975}, {:item=>"chicken", :sml=>725, :lrg=>1150}, {:item=>"shrimp", :sml=>975, :lrg=>1350}] 

2.0.0p247 :014 > fullMenu.map(&:values)
 => [["pasta", 550, 975], ["chicken", 725, 1150], ["shrimp", 975, 1350]] 
然后,您的代码将工作:

fullMenu.each do |item, p_sml, p_lrg|
  puts "#{item} Small: $#{p_sml} -or- Large: $#{p_lrg}"
end
这叫做多维散列还是数组

这将是一个哈希数组。如果你愿意,你可以做一系列的数组,但我认为这种方法是可行的

编辑-所有这些都表明,更好的方法是@falsetru所拥有的

fullMenu = [{:item => "pasta",   :sml => 550, :lrg => 975}, 
            {:item => "chicken", :sml => 725, :lrg => 1150},
            {:item => "shrimp",  :sml => 975, :lrg => 1350}]

fullMenu.each { |h|
  puts "%s Small: %.2f -or- Large: %.2f" % [h[:item], h[:sml]/100.0, h[:lrg]/100.0]
}
输出:

pasta Small: 5.50 -or- Large: 9.75
chicken Small: 7.25 -or- Large: 11.50
shrimp Small: 9.75 -or- Large: 13.50

是的!非常感谢。这正是我想要的。“散列数组。”谢谢CDub,这是使用数组/散列的最佳方式,还是您会建议更有效的设置?我完全会使用@falsetru的答案。:)谢谢-我的意思是,你认为像我这样设置我的数组/散列是最优的吗?哦,我听到了。散列数组很好,但我肯定会像@falsetru那样读取散列,因为散列中键/值对的顺序不能保证。