是否有可以在列中打印Ruby数组的内置方法或gem?

Sea*_*sey 1 ruby pretty-print

我有一个大型的Ruby数组,我想在列中打印,就像Unix''ls'命令的默认输出一样(至少在OS X上).有没有宝石或内置方法可以做到这一点?我知道awesome_print gem.它有一些性感的输出,但它似乎没有提供列.

dbe*_*hur 7

可枚举的#each_slice可能是你的朋友.

$ irb
irb> a = (0..18).to_a
=> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18]
irb> a.each_slice(5) { |row| puts row.map{|e| "%5d" % e}.join("  ") }
    0      1      2      3      4
    5      6      7      8      9
   10     11     12     13     14
   15     16     17     18
Run Code Online (Sandbox Code Playgroud)

如果您希望它们在列中排序,您可以使用slice和Enumerable#zip

irb> cols = a.each_slice((a.size+2)/3).to_a
=> [[0, 1, 2, 3, 4, 5, 6], [7, 8, 9, 10, 11, 12, 13], [14, 15, 16, 17, 18]]
irb> cols.first.zip( *cols[1..-1] ).each{|row| puts row.map{|e| e ? '%5d' % e : '     '}.join("  ") }
    0      7     14
    1      8     15
    2      9     16
    3     10     17
    4     11     18
    5     12       
    6     13       
Run Code Online (Sandbox Code Playgroud)