如何在ruby中打印多维数组?

时间:2011-09-19 23:02:39

标签: ruby printing multidimensional-array

在ruby中打印多维数组的首选方法是什么?

例如,假设我有这个2D数组:

x = [ [1, 2, 3], [4, 5, 6]]

我尝试打印它:

>> print x
123456

还有什么行不通:

>> puts x
1
2
3
4
5
6

6 个答案:

答案 0 :(得分:12)

如果您只是在寻找易于阅读的调试输出,“p”很有用(它会调用数组上的inspect())

p x
[[1, 2, 3], [4, 5, 6]]

答案 1 :(得分:7)

或者:

p x

-OR -

require 'pp'

. . .        

pp x

答案 2 :(得分:6)

如果你想拍摄多维数组并将其作为二维图形的直观表示,这很有效:

x.each do |r|
  puts r.each { |p| p }.join(" ")
end

然后你在终端中以这样的结尾结束:

  1 2 3
  4 5 6
  7 8 9

答案 3 :(得分:4)

Ruby附带的

PrettyPrint将为您完成此任务:

require 'pp'
x = [ [1, 2, 3], [4, 5, 6]]
pp x

然而,Ruby 1.9.2中的输出(如果可能,您应该尝试使用)会自动执行此操作:

ruby-1.9.2-p290 :001 > x = [ [1, 2, 3], [4, 5, 6]]
 => [[1, 2, 3], [4, 5, 6]] 
ruby-1.9.2-p290 :002 > p x
[[1, 2, 3], [4, 5, 6]]
 => [[1, 2, 3], [4, 5, 6]] 

答案 4 :(得分:2)

迭代“封闭”数组中的每个条目。该数组中的每个条目都是另一个数组,因此也要迭代它。打印。或者,使用join

arr = [[1, 2, 3], [4, 5, 6]]

arr.each do |inner|
  inner.each do |n|
    print n # Or "#{n} " if you want spaces.
  end
  puts
end

arr.each do |inner|
  puts inner.join(" ") # Or empty string if you don't want spaces.
end

答案 5 :(得分:2)

执行此操作的“基本”方式以及IRB执行此操作的方式是打印#inspect的输出:

ruby-1.9.2-p290 :001 > x = [ [1, 2, 3], [4, 5, 6]]
 => [[1, 2, 3], [4, 5, 6]] 
ruby-1.9.2-p290 :002 > x.inspect
 => "[[1, 2, 3], [4, 5, 6]]"
然而,

pp会产生更好的输出。