ruby 2.0如何通过坐标访问矩阵中的元素?

时间:2013-04-08 16:33:58

标签: ruby matrix

我是红宝石的新手,但这是问题所在。假设我有一个矩阵,我需要在1,2

修改一个元素
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>'

我检查了ruby doc,但没有找到任何答案,抱歉问这么愚蠢的问题...

1 个答案:

答案 0 :(得分:9)

获取元素:

mm[1,2] #output 0

设置元素:

没有方法可以做到这一点。 Matrix是不可变对象,无法更改(即恕我直言,不是那么优化)。您可以将each的矩阵复制到数组,更改元素,然后转换回来,或者使用猴子补丁

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

或者,如果你不想修补或想要有点hacky(虽然看起来不太好):

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