我正在尝试使用以下格式在ruby中打印字符串和整数的哈希值:
x = {"abc" => 12,"abcdef" => 44, "sryyy" => 5}
puts x
输出应如下所示:
abc 12
abcdef 44
sryyy 5
我可以获得每个字符串的最大长度,然后根据它缩进每一行,但有没有更容易的方法呢?或者有一种方法可以做到这一点吗?
答案 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}