如何根据整数中的数字更改空格数?

时间:2017-02-08 12:19:55

标签: ruby

我希望在每行开头用行号打印出数组中的值。我想更改间距以确保值垂直排列,而不管数组的大小。

@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

这样可行,但我想知道是否有更好的方法可以做到这一点?

3 个答案:

答案 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