gpt4 book ai didi

ruby - 循环遍历 ruby​​ 中的二维数组以表格格式显示它?

转载 作者:数据小太阳 更新时间:2023-10-29 08:06:09 24 4
gpt4 key购买 nike

我如何在终端中以表格格式表示二维数组,它像表格一样正确排列列?

看起来像这样:

         1       2       3          4          5
1 [ Infinity | 40 | 45 | Infinity | Infinity ]
2 [ Infinity | 20 | 50 | 14 | 20 ]
3 [ Infinity | 30 | 40 | Infinity | 40 ]
4 [ Infinity | 28 | Infinity | 6 | 6 ]
5 [ Infinity | 40 | 80 | 12 | 0 ]

代替:

[ Infinity,40,45,Infinity,Infinity ]
[ Infinity,20,50,14,20 ]
[ Infinity,30,40,Infinity,40 ]
[ Infinity,28,Infinity,6,6 ]
[ Infinity,40,80,12,0 ]

最佳答案

a = [[Infinity, 40, 45, Infinity, Infinity],
[Infinity, 20, 50, 14, 20 ],
[Infinity, 30, 40, Infinity, 40 ],
[Infinity, 28, Infinity, 6, 6 ],
[Infinity, 40, 80, 12, 0 ]]

分步说明

您首先需要达到列宽。下面的 col_width 是一个数组,它给出了每列的宽度。

col_width = a.transpose.map{|col| col.map{|cell| cell.to_s.length}.max}

然后,这将为您提供表格的主要部分:

a.each{|row| puts '['+
row.zip(col_width).map{|cell, w| cell.to_s.ljust(w)}.join(' | ')+']'}

要给出标签,请执行以下操作。

puts ' '*(a.length.to_s.length + 2)+
(1..a.length).zip(col_width).map{|i, w| i.to_s.center(w)}.join(' ')

a.each_with_index{|row, i| puts "#{i+1} ["+
row.zip(col_width).map{|cell, w| cell.to_s.ljust(w)}.join(' | ')+
']'
}

All in One 这是针对 ruby​​1.9 的。稍作修改即可使其在 ruby​​ 1.8 上运行。

a
.transpose
.unshift((1..a.length).to_a) # inserts column labels #
.map.with_index{|col, i|
col.unshift(i.zero?? nil : i) # inserts row labels #
w = col.map{|cell| cell.to_s.length}.max # w = "column width" #
col.map.with_index{|cell, i|
i.zero?? cell.to_s.center(w) : cell.to_s.ljust(w)} # alligns the column #
}
.transpose
.each{|row| puts "[#{row.join(' | ')}]"}

关于ruby - 循环遍历 ruby​​ 中的二维数组以表格格式显示它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5208155/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com