2016-09-28 88 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