あなたがしているのは、デカルト積を取得しようとしていることです。
CartesianArray
メソッドを継承しArray
て提供するというクラスを作成しました#product
。
class CartesianArray < Array
def initialize(array_one, array_two)
@array_one, @array_two = array_one, array_two
end
def product
results = []
@array_one.each do |a1|
@array_two.each do { |a2| results << [a1, a2] }
end
results
end
end
あなたはそれをこのように使うことができます:
# Test Code
numbers = [1,2,3,4]
letters = ['a','b','c','d','e','f']
cart_array = CartesianArray.new(numbers, letters)
p cart_array.product
[[1, "a"], [1, "b"], [1, "c"], [1, "d"], [1, "e"], [1, "f"], [2, "a"], [2, "b"], [2, "c"], [2, "d"], [2, "e"], [2, "f"], [3, "a"], [3, "b"], [3, "c"], [3, "d"], [3, "e"], [3, "f"], [4, "a"], [4, "b"], [4, "c"], [4, "d"], [4, "e"], [4, "f"]]
そのクラスに保持したくない場合は、メソッドを引き出して、#product
コードに合うように変更できると確信しています。