Ruby- 使用一个数组中的元素来对另一个数组进行加减操作

6
我这样做:
a = [1,2,3,4]  
b = [2,3,4,5]  
c = b - a  
put c 

我明白了 答案是 -> [1]
我想要的答案是 -> [1,1,1,1](像矩阵加法/减法一样)
我尝试了这个:
c.each {|e| c[e] = b[e] - a[e]}  

但我得到了这个答案:[1,0,0,0]

有人能给我一个正确的方法吗?非常感谢!

2个回答

18

你可以使用zip方法:

a.zip(b).map { |x, y| y - x }
# => [1, 1, 1, 1]

还有一个 Matrix 类:

require "matrix"

a = Matrix[[1, 2, 3, 4]]
b = Matrix[[2, 3, 4, 5]]
c = b - a
# => Matrix[[1, 1, 1, 1]]

非常感谢。我把所有东西都转换成了矩阵。还有一个问题。我应该使用什么来自动构建并填充矩阵?我使用了array1 = Array.new(hi) {|e| e = 0} 来构建和填充用户定义的数组为0。是否有类似于矩阵的命令?再次感谢! - subyman
@subyman 你可能在寻找 Matrix.build 方法。请查看文档获取更多信息。当然,还有其他一些方法可供选择。 - Andy
@sawa 谢谢,但我现在正在尝试将其应用于矩阵。 - subyman
@Andy 我会试着操作一下。非常感谢你的帮助。 - subyman
记录一下,我的问题的答案是:a = Matrix.build(1,4) {0},它会返回[[0,0,0,0]]。 - subyman
我刚刚发现在Ruby中矩阵是不可变的,所以我必须放弃那个计划。我将使用带有zip的数组操作。谢谢。 - subyman

2
你可以使用each_with_indexmap函数。
 c = b.each_with_index.map { |n,i| n - a[i] }
 # => [1, 1, 1, 1]

谢谢,我老是忘记了1.9版本中添加了什么内容。 - Andy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接