# Posted By

ishikawa on 02/16/08

# Statistics

Viewed 561 times
Favorited by 1 user(s)

# Array#product for Ruby 1.8

/ Published in: Ruby

Returns the cartesian product of the receiver and the arrays given as arguments.

Copy this code and paste it in your HTML
`class Array   # Array#product  # -------------  # Returns the cartesian product of the receiver and the arrays given as arguments.  #   # Usage:  #   [1, 2, 3].product([4, 5])     # => [[1, 4], [1, 5], [2, 4], [2, 5], [3, 4], [3, 5]]  #   [1, 2].product([1, 2])        # => [[1, 1], [1, 2], [2, 1], [2, 2]]  #   [1, 2].product([3, 4],[5, 6]) # => [[1, 3, 5], [1, 3, 6], [1, 4, 5], [1, 4, 6],   #                                 #     [2, 3, 5], [2, 3, 6], [2, 4, 5], [2, 4, 6]]  #   [1, 2].product()              # => [[1], [2]]  #   [1, 2].product([])            # => []  #  #   [1] * [2, 3]                  # => [[1, 2], [1, 3]]  #   [1, 2] * [3, 4]               # => [[1, 3], [1, 4], [2, 3], [2, 4]]  #  def product(*others)    arrays = [ self.map {|i| [i] } ].concat(others)    arrays.inject do |result, item|      (result * item).map do |t|         t[0].dup << t[1]       end    end  end   def multiplication_operator_with_product(other)    unless other.kind_of? Array       multiplication_operator_without_product(other)    else       self.inject([]) do |ret, i|        ret.concat( other.map {|j| [i, j]} )      end    end  end   alias_method :multiplication_operator_without_product, :*  alias_method :*, :multiplication_operator_with_product end`