2016-09-28 92 views
0

我试图打印字符串和整数的散列红宝石采用以下格式:打印哈希与缩进各行

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

输出应该是这样的:

abc 12 
abcdef 44 
sryyy 5 

我可以得到每个字符串的最大长度,然后根据这个缩进每一行,但有没有更简单的方法来做到这一点?或者有没有这样做的方法?

+1

我不明白;如果不知道密钥的最大长度,则无法知道缩进级别。 –

+0

问题更新 –

+1

看看'awesome_print'宝石 –

回答

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} 
0

还是要小更新@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