红宝石。同时将输出左右对齐

时间:2018-11-14 22:14:29

标签: ruby formatting

我有这个哈希

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)。我在这里想念什么吗?

1 个答案:

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