2012-09-06 4 views
2

가능한 중복 :
ruby array element groupingK-1 K 길이 배열의 길이 서브 어레이 얻기

예. 지정된 Array A :

a = [1, 2, 3] 

길이 3 그래서 나는 모든이 길이 배열을 인쇄 할 수 있습니다. 다음과 같습니다 :

[1, 2] 
[1, 3] 
[2, 3] 

Ruby에서 서브 세트 배열을 얻는 방법이 있는지 알 수 없습니다. 그러한 방법이 없다면 가장 효율적인 방법은 무엇입니까? 단순한 combination 2의 요소이다

답변

5

: @Joshua 코멘트에서 지적

>> xs = [1, 2, 3] 
>> xs.combination(xs.size - 1).to_a 
=> [[1, 2], [1, 3], [2, 3]] 

[편집], 워드 프로세서는 순서가 보장되지 것을 주장 (!). 여기에 요청한 순서대로 조합을 생성하는 기능적 구현이 있습니다. 완성도를 위해, 나는 원래 combination 방법으로는 게으른 만들 수 있습니다 :

require 'enumerable/lazy' 

class Array 
    def combinations_of(n) 
    if n == 0 
     [[]].lazy 
    else 
     0.upto(self.size - 1).lazy.flat_map do |idx| 
     self.drop(idx + 1).combinations_of(n - 1).map do |xs| 
      [self[idx]] + xs 
     end 
     end  
    end 
    end 
end 
+1

그래,하지만 워드 프로세서 (HTTP를 [ "구현은 조합이 굴복하는 순서에 대한 보증하지 않습니다"] _ 말 : // rdoc.info/stdlib/core/Array:combination)_는 OP에서 문제가 될 수 있습니다. –

+0

@ JoshuaCheek : 나는이 경고에 당혹 스럽다는 것을 인정한다 ... – tokland

+0

나는 명령을 신경 쓰지 않는다. –