在Ruby中,有一种简单的方法可以将n维数组中的每个元素乘以一个数字吗?
这样:
[1,2,3,4,5].multiplied_by 2 == [2,4,6,8,10]
和[[1,2,3],[1,2,3]].multiplied_by 2 == [[2,4,6],[2,4,6]]
?
(显然我编写了multiplied_by
函数来区别于*
,它似乎连接了数组的多个副本,遗憾的是这不是我需要的。)
谢谢!
答案 0 :(得分:6)
长形的等价物是:
[ 1, 2, 3, 4, 5 ].collect { |n| n * 2 }
这并不是那么复杂。您可以随时使用multiply_by
方法:
class Array
def multiply_by(x)
collect { |n| n * x }
end
end
如果你希望它以递归方式相乘,你需要将其作为一个特例加以处理:
class Array
def multiply_by(x)
collect do |v|
case(v)
when Array
# If this item in the Array is an Array,
# then apply the same method to it.
v.multiply_by(x)
else
v * x
end
end
end
end
答案 1 :(得分:3)
如何使用ruby标准库中的Matrix
类?
irb(main):001:0> require 'matrix'
=> true
irb(main):002:0> m = Matrix[[1,2,3],[1,2,3]]
=> Matrix[[1, 2, 3], [1, 2, 3]]
irb(main):003:0> m*2
=> Matrix[[2, 4, 6], [2, 4, 6]]
irb(main):004:0> (m*3).to_a
=> [[3, 6, 9], [3, 6, 9]]
答案 2 :(得分:1)
>> require 'facets'
>> [1, 2, 3].ewise * 2
=> [2, 4, 6]
>> [[1, 2], [3, 4]].map { |xs| xs.ewise * 2 }
=> [[2, 4], [6, 8]]
http://rubyworks.github.com/facets/doc/api/core/Enumerable.html