笛卡尔幂(自相矛盾的笛卡尔积)

我需要在我的代码中计算一个数组的笛卡尔积,其自身的次数不同。 例如,如果我的数组是[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幸运实现 :

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

你的回答略有不同:

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

因为我喜欢monkeypatching,我把它放在数组本身:

 class Array def **(n) self.product( *(n-1).times.map{ self } ) end end 

不过,我不确定是否有更优雅的方法可以将n-1个自己的副本传递给该方法。