在ruby中打印哈希,每行都有缩进

时间:2016-09-28 15:54:55

标签: ruby ruby-1.9.3

我正在尝试使用以下格式在ruby中打印字符串和整数的哈希值:

x = {"abc" => 12,"abcdef" => 44, "sryyy" => 5}
puts x

输出应如下所示:

   abc 12  
abcdef 44  
 sryyy 5

我可以获得每个字符串的最大长度,然后根据它缩进每一行,但有没有更容易的方法呢?或者有一种方法可以做到这一点吗?

2 个答案:

答案 0 :(得分:1)

或者稍微更新@engineersmnky你可以这样做:

x = {"abc" => 12,"abcdef" => 44, "sryyy" => 5}
x.each do |key, value|
   p "#{key.rjust(x.keys.max_by(&:length).length)} #{value}"
end

>    abc 12
> abcdef 44
>  sryyy 5

答案 1 :(得分:0)

给出这个例子。我认为像使用sprintf查找最大长度和填充这样简单就足够了,例如

def justified_printing_hash(h)
  max_length = h.keys.max_by(&:length).length
  h.each {|k,v| puts sprintf("%<key>#{max_length}s %<value>d",{key:k,value:v}) }
end

用法

x = {"abc" => 12,"abcdef" => 44, "sryyy" => 5}
justified_printing_hash(x)
   abc 12
abcdef 44
 sryyy 5
#=> {"abc" => 12,"abcdef" => 44, "sryyy" => 5}