繁体   English   中英

用红宝石打印哈希,每行都有缩进

[英]Print hash in ruby with indentation for each line

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

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

输出应如下所示:

   abc 12  
abcdef 44  
 sryyy 5

我可以获得每个字符串的最大长度,然后根据它缩进每一行,但是有没有更简单的方法呢? 还是已经有这样做的方法?

或稍作更新@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

给出这个例子。 我认为只要找到最大长度并使用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}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM