2013-04-08 73 views
3

我是新來的紅寶石,但這是問題所在。說我有一個矩陣,我需要在1,2ruby​​ 2.0如何通過座標訪問矩陣中的元素?

mm = Matrix.build(2,4) {0} 
mm[1][2] = 404 

修改元素,但這樣會上升錯誤信息

ArgumentError: wrong number of arguments (1 for 2) 
from /Users/xxxxxx/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/matrix.rb:314:in `[]' 
from (irb):11 
from /Users/xxxxxx/.rvm/rubies/ruby-2.0.0-p0/bin/irb:16:in `<main>' 

我已經檢查紅寶石文檔,但沒有找到任何答案,不好意思問這樣一個愚蠢的問題...

回答

8

獲取元素:

mm[1,2] #output 0 

集元素:

沒有辦法可以做到這一點。矩陣是不可改變的對象,不能改變(這是恕我直言,不是最佳)。您可以通過each複製矩陣陣列,更改的元素,並將其轉換回,或使用猴補丁

class Matrix 
    def []=(i, j, x) 
    @rows[i][j] = x 
    end 
end 
mm[1,2] = 404 

或者,如果你不想猴補丁或想成爲一個有點哈克(雖然看起來不太好):

mm.send(:[]=, 1, 2, 404) 
+4

我同意,我們可能應該讓矩陣可變。 – 2013-04-08 17:14:35

+0

感謝您的回答,並且對ruby的第一印象是如此簡單和優雅,我不明白爲什麼矩陣和多維數組如此複雜...... – hihell 2013-04-09 09:08:12

+0

因爲顯然所有嚴肅的數學家都使用Python。我自己遇到這個問題.... – Brandon 2014-02-02 20:05:32