如何打印具有固定列宽的2D数组

Fro*_*shh 1 ruby printing arrays 2d

我有一个数组:

animals = [
  ["cats", "dogs"],
  ["verrylongcat", "dog"],
  ["shortcat", "verrylongdog"],
  ["cat", "dog"]
]
Run Code Online (Sandbox Code Playgroud)

而且我想很好地展示它.是否有一种简单的方法使colums固定宽度,所以我得到这样的东西:

cats            dogs
verrylongcat    dog
shortcat        verrylongdog
cat             dog
Run Code Online (Sandbox Code Playgroud)

animals 只是一个例子,我的数组也可能有3列,4列甚至更多.

ndn*_*kov 5

您正在寻找String#ljust:

max_cat_size = animals.map(&:first).max_by(&:size).size
animals.each do |cat, dog|
  puts "#{cat.ljust(max_cat_size)} #{dog}"
end
Run Code Online (Sandbox Code Playgroud)

如果您想要多个空格,只需在插值中添加相应的量即可.


假设你的阵列是n×m而不是2×m:

animal_max_sizes = animals.first.size.times.map do |index|
  animals.transpose[index].map(&:to_s).max_by(&:size).size
end

animals.map do |animal_line|
  animal_line.each.with_index.reduce('') do |animal_line, (animal, index)|
    animal_line + animal.to_s.ljust(animal_max_sizes[index].next)
  end
end.each { |animal_line_stringified| puts animal_line_stringified }
Run Code Online (Sandbox Code Playgroud)

注:to_sES在情况下,使用您的数组包含nilS,数字等