2017-08-30 46 views
0

我:我誤解'min'了嗎?

array1 = [[0, 0], [2, 1]] 
array2 = [[1, 0], [3, 1]] 

我相信這應該是這樣:

array1[1][0] == [0, 2] 
array2[1][0] == [0, 3] 

在此之後,爲什麼下面的代碼,

[array1[1][0], array2[1][0]].min # => 2 

回報2

2是怎樣的二維數組中的最小值,其中有三個0實例和三個1實例?

我誤解了min函數,或者我誤解了當我使用二維數組時發生了什麼?

+1

_「我相信這應該是這樣的[...]「 - - 驗證您的假設,啓動[irb](h ttp://ruby-doc.org/stdlib-2.0.0/libdoc/irb/rdoc/IRB.html),輸入'array1 = [[0,0],[2,1]]',然後輸入array1 [ 1] [0]'。 – Stefan

+0

未經我的許可,誰編輯了我該死的帖子? –

+1

引用幫助中心>權限> [編輯問題和答案](https://stackoverflow.com/help/privileges/edit):_「我們相信社區編輯的力量,這意味着一旦您產生了足夠的聲譽,我們相信你可以在系統中編輯**任何內容,而不需要通過同行評議。不僅僅是你的帖子 - **任何人的帖子!**「_ – Stefan

回答

3

[1][0]調用第一個數組時,您從中取出第二個數組[2, 1],然後從第2號取得第一個數字。

array1[1][0] => 2 
array2[1][0] => 3 
[2, 3].min => 2 
+0

等等。所以你說第一組括號代表[0,0]和[2,1],而第二組括號要麼是0,0,2或1? 所以如果我打電話給array1 [1] [1],我正在看[0,0],並從數組中調用第二個零數組? 因此,它的立場是因爲該格式通常讀取: arrayofarraysname [arraywithinarray] [elementofarray]? –

+0

@AaronGodhard'[]'是一個返回對象的方法調用。如果接收者碰巧是一個數組,那麼返回值就是給定索引處的對象(從零開始),所以'array1 [1]'返回第二個元素。如果該元素也是一個數組,那麼'array1 [1] [1]'將返回其第二個元素。你也可以編寫:'subarray = array [1]',然後調用'subarray [1]'。同樣的結果。 – Stefan

+0

@stefan你的回答完美地解釋了我的問題 - 謝謝你:)。所以基本上我在這裏用錯誤的方式思考;我不打電話給兩個子陣列,我打電話給一個子陣列。 –

1

它是這樣:

array1[1][0] == [2, 1][0] == 2 
array2[1][0] == [3, 1][0] == 3 
[array1[1][0], array2[1][0]].min == [2, 3].min # => 2 

在你的反假設:

array1[1][0] == [0, 2] 
array2[1][0] == [0, 3] 

的比較應該是:

[array1[1][0], array2[1][0]].min == [[0, 2], [0, 3]].min # => [0, 2]