我有这个哈希
itemHash = {"124"=>["shoes", "59.99"],
"456"=>["pants", "49.50"],
"352"=>["socks", "3.99"]}
我需要像这样显示它,“描述”在左侧对齐,“价格”在右侧
Item Description Price
----- -------------- -----
124 shoes 59.99
352 socks 3.99
456 pants 19.50
但是当我尝试这段代码
itemHash.each do |a,b|
print " #{a} "
b.each do |c,d|
print ("%8s %5s" % [c,d])
end
puts
end
我明白了
Item Description Price
---- ----------- -----
124 shoes 59.99
456 pants 49.50
352 socks 3.99
我已经尝试过“打印(“%8s%5-s”%[c,d])”和“打印(“%-8s%5s”%[c,d])”,但都不合适。由于某种原因,当我对齐说明(c)时,它会自动将其应用于价格(d)。我在这里想念什么吗?
答案 0 :(得分:1)
您的b.each do |c,d|
循环实际上是在产生数组中的每个项目,并试图对不存在的内容进行解构,所以您得到:
"%8s %5s" % ["shoes", nil]
"%8s %5s" % ["59.55", nil]
等
您只需要省略内循环:
itemHash.each do |a,b|
print " #{a} "
print "%-8s %5s" % b
puts
end
或更简单地说:
itemHash.each {|a, b| puts format(" %-8s%-8s%5s", a, *b) }