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



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

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

和CCD_ 2?

(很明显,我编写了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

使用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]]

Facets和往常一样,有一些巧妙的想法:

>> 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

相关内容

  • 没有找到相关文章

最新更新