我是 ruby​​ 的新手,但这就是问题所在。假设我有一个矩阵,我需要修改 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​​ 文档,但没有找到任何答案,很抱歉提出这样一个愚蠢的问题......

最佳答案

获取元素:

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)

关于ruby 2.0 如何通过坐标访问矩阵中的元素?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15884376/

10-14 14:08
查看更多