将一个n维数组的每个元素乘以Ruby中的数字

Ruby中,有一种简单的方法可以将n维数组中的每个元素乘以一个数字吗?

这样:
[1,2,3,4,5] .multiplied_by 2 == [2,4,6,8,10]

和[[1,2,3],[1,2,3]] .sultised_by 2 == [[2,4,6],[2,4,6]]?

(显然我编写了multiplied_by函数来区别于*,它似乎连接了数组的多个副本,遗憾的是这不是我需要的).

谢谢!

最佳答案
长形的等价物是:

[ 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

转载注明原文:将一个n维数组的每个元素乘以Ruby中的数字 - 代码日志