我需要在我的代碼中計算一個數組的笛卡爾積,其本身的次數可以變化。例如,如果我的數組是[1,2]
,我需要填寫這些值分爲三個插槽,其結果必然是:笛卡爾的力量(笛卡爾乘積與自我任意時間)
[1,1,1]
[1,1,2]
[1,2,1]
[1,2,2]
[2,1,1]
[2,1,2]
[2,2,1]
[2,2,2]
什麼是最簡單的方法是什麼?
我需要在我的代碼中計算一個數組的笛卡爾積,其本身的次數可以變化。例如,如果我的數組是[1,2]
,我需要填寫這些值分爲三個插槽,其結果必然是:笛卡爾的力量(笛卡爾乘積與自我任意時間)
[1,1,1]
[1,1,2]
[1,2,1]
[1,2,2]
[2,1,1]
[2,1,2]
[2,2,1]
[2,2,2]
什麼是最簡單的方法是什麼?
您可能正在尋求與重複排列和Ruby的Array
從標準庫幸運implements this:
[1,2].repeated_permutation(3).to_a
# [[1, 1, 1], [1, 1, 2], [1, 2, 1], [1, 2, 2], [2, 1, 1], [2, 1, 2], [2, 2, 1], [2, 2, 2]]
因爲我喜歡的monkeypatching,我把這個數組本身:
class Array
def **(n)
self.product(*(n-1).times.map{ self })
end
end
我不知道是否有通過N-1自己的副本的方法更優雅的方式,雖然。
你的答案有輕微的變體:
class Array
def **(n)
product(*([self]*(n-1)))
end
end
[1,2]**3
# => [[1, 1, 1], [1, 1, 2], [1, 2, 1], [1, 2, 2],
# [2, 1, 1], [2, 1, 2], [2, 2, 1], [2, 2, 2]]
啊,我喜歡這一點遠遠超過' .times.map'。謝謝。 – Phrogz
謝謝!我以前沒有見過這個。 – Phrogz