2014-01-25 4 views
1

배열의 데카르트 곱을 다양한 횟수로 계산해야 할 필요가 있습니다. 예를 들어, 내 배열 [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] 

? 하지만,

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

나는 방법에 자신의 N-1 사본을 전달하는 더 우아한 방법이 있는지 확실하지 않습니다 : 나는 monkeypatching을 좋아하기 때문에

답변

3

:

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

감사합니다. 나는 이전에 이것을 보지 못했습니다. – Phrogz

0

, 나는 배열 자체에 넣어 .

2

당신의 대답에 약간의 변형 : 당신은 아마 반복과 순열을 찾고 루비의 Array 표준 라이브러리에서 운이 좋게 implements this된다

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

아, 나는'보다는 멀리 더 좋아 . 감사. – Phrogz