我希望在每行开头用行号打印出数组中的值。我想更改间距以确保值垂直排列,而不管数组的大小。
@lines.each_with_index {|l,i|
newtext = l[:text]
space = ' ' * @lines.size.to_s.size
cur_space = i.to_s.size
(1..cur_space).each { space.chop! }
puts "\##{i}#{space} #{newtext}"
}
输出
#0 blah
#1 blah
#2 blah
#3 blah
#4 blah
#5 blah
#6 blah
#7 blah
#8 blah
#9 blah
#10 blah
#11 blah
#12 blah
#13 blah
这样可行,但我想知道是否有更好的方法可以做到这一点?
答案 0 :(得分:5)
您正在寻找String#ljust
:
index_size = @lines.size.pred.to_s.size
@lines.each_with_index do |line, index|
puts "##{index.to_s.ljust(index_size)} #{line[:text]}"
end
答案 1 :(得分:2)
你可以使用标签:
2.2.4 :001 > class Tabs
2.2.4 :002?> def self.do_it
2.2.4 :003?> (1..13).each do |number|
2.2.4 :004 > puts "##{number}\tblah"
2.2.4 :005?> end
2.2.4 :006?> end
2.2.4 :007?> end
=> :do_it
2.2.4 :008 > Tabs.do_it
#1 blah
#2 blah
#3 blah
#4 blah
#5 blah
#6 blah
#7 blah
#8 blah
#9 blah
#10 blah
#11 blah
#12 blah
#13 blah
答案 2 :(得分:2)
您还可以将format
与"%-3d"
:
-
:左对齐此次转化的结果。
d
:将参数转换为十进制数。
n = 14
width = (n-1).to_s.size
pattern = "#%-#{width}d %s"
n.times do |i|
puts format(pattern, i, 'blah')
end
输出:
#0 blah
#1 blah
#2 blah
#3 blah
#4 blah
#5 blah
#6 blah
#7 blah
#8 blah
#9 blah
#10 blah
#11 blah
#12 blah
#13 blah