我有两个数组:
@a = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
@b = [a, b, c]
我需要将 a
中的第 n 列替换为 b
,如下所示:
swap_column(0)
#=> [a, 2, 3]
[b, 5, 6]
[c, 8, 9]
(如果有人想知道的话,这是为了使用 Cramer's rule 来求解方程组。)
我想出的代码:
def swap_column(n)
@a.map.with_index { |row, j| row[n] = @b[j] }
end
如何摆脱此处的赋值,以便 map
返回修改后的矩阵,同时保持 @a 不变?
最佳答案
你想要的是dup
。另外,您的 map.with_index
block 的返回值是错误的。
def swap_column(i)
@a.map.with_index{|row, j| row = row.dup; row[i] = @b[j]; row}
end
或
def swap_column(i)
@a.map.with_index{|row, j| row.dup.tap{|row| row[i] = @b[j]}}
end
关于ruby - 用映射替换数组元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19169328/