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列甚至更多.
您正在寻找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,数字等