2013-03-03 18 views
2

關於多維數組的Ruby練習表示,需要兩個each方法實例來訪問多維數組的內部元素。以下:`each`方法是否改變了它的行爲?

x = [[1,2],[3,4],[5,6]] 
x.each do |a| 
    a.each do |b| 
    puts b 
    end 
end 

應該返回:

# 1 
# 2 
# 3 
# 4 
# 5 
# 6 

然而,這是沒有必要使用兩個each方法。如果我只是做

x.each { |a| puts a } 

我得到了同樣的結果。看起來each的單個實例已經進入了多維數組的內部層次。

在這種情況下,我將如何訪問第一級?換句話說,我將如何獲得以下內容?

# [1,2] 
# [3,4] 
# [5,6] 

回答

3

Ruby中有三種不同的打印功能。讓我們嘗試他們在Ruby提示:

> puts [1,2] 
1 
2 
=> nil 

> p [1,2] 
[1, 2] 
=> [1, 2] 

> print [1,2] 
[1, 2]=> nil 

如果你不熟悉irb,繼脂肪箭頭=>表達式是語句的返回值。

+0

哦,好吧!所以這不是關於'每個'的行爲,而是'puts'。 – 2013-03-03 15:55:47

+0

這是正確的。 – 2013-03-03 15:57:44

0
x.each { |a| puts a } 

這將調用放在x數組的每個元素上。

這是一樣的做:

puts [1,2] 
puts [3,4] 
puts [5,6] 

把陣列上像你看到的將其格式化。

1

而且,如果你做到這

puts x 

你會得到完全相同的結果。這是因爲puts以特殊方式處理數組。它列舉了所有元素,並分別對其調用puts。 (這是遞歸的,就像你想象的那樣)。

這將讓大約輸出你想要的:

x.each {|a| p a} 

x.each {|a| puts a.inspect } 

輸出

# >> [1, 2] 
# >> [3, 4] 
# >> [5, 6] 
相關問題