我是 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/