2011-09-19 47 views
6

在紅寶石中打印多維數組的首選方法是什麼?如何在ruby中打印多維數組?

例如,假設我有這樣的二維數組:

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

我嘗試打印:

>> print x 
123456 

還什麼不工作:

>> puts x 
1 
2 
3 
4 
5 
6 
+0

哦,我以爲你的意思是一個網格。沒關係。 –

回答

12

如果你只是在尋找調試輸出,易於閱讀, 「P」 是非常有用的(它調用檢查()陣列上)

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

遍歷「封閉」數組中的每個條目。該數組中的每個條目都是另一個數組,因此重複該數組。打印。或者,使用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 
7

或者:

p x 

- 或 -

require 'pp' 

. . .   

pp x 
+0

+1提到'pp',我甚至不知道存在。它似乎與ruby 1.9.2上的這個例子的檢查一樣。 – spike

4

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]] 
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產生輕微更好的輸出。

5

如果你想利用你的多維數組並將其顯示爲二維圖形的直觀表示,這很好地工作:

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

然後你在你的終端是這樣的結尾:

1 2 3 
    4 5 6 
    7 8 9 
+0

'.map {| p |的用途是什麼? p}'?! – muichkine

+0

感謝您的注意。你可以做每個而不是地圖。我將編輯樣本以使用它們,因爲它更適合於此目的。 – ogoldberg