2017-10-04 4 views
-1
func combinations<T>(of array: [[T]]) -> [[T]] { 
    return array.reduce([[]]) { combihelper(a1: $0, a2: $1) } 
} 

func combihelper<T>(a1: [[T]], a2: [T]) -> [[T]] { 
    var x = [[T]]() 
    for elem1 in a1 { 
     for elem2 in a2 { 
      x.append(elem1 + [elem2]) 
     } 
    } 
    return x 
} 

코드를 하나의 코드로 작성하는 것이 가장 좋습니다. 당신이 원하는 모든 하나 하나에 두 가지 방법을 결합 할 경우신속한 4 가지 조합 func

+0

기능에 대한 예를 설명해 주시겠습니까? –

+0

예, 물론입니다. 그것은 당신에게 매개 변수의 조합을 제공합니다. 예를 들어, var par = [[Double]]() par.append (Array (stride (from : 0, through : 10, by : 1.0)) par.append , through : 0, by : 1.0))) comb = comb (of : par) – Anton

답변

2

다만 $ 0으로 A1을 변경하고 A2에서 $ 1 :

func combinations<T>(of array: [[T]]) -> [[T]] { 
    return array.reduce([[]]) { 
     var x = [[T]]() 
     for elem1 in $0 { 
      for elem2 in $1 { 
       x.append(elem1 + [elem2]) 
      } 
     } 
     return x 
    } 
} 

let multi = [[1,2,3,4,5],[1,2,3,4,5,6,7,8,9,0]] 
combinations(of: multi) // [[1, 1], [1, 2], [1, 3], [1, 4], [1, 5], [1, 6], [1, 7], [1, 8], [1, 9], [1, 0], [2, 1], [2, 2], [2, 3], [2, 4], [2, 5], [2, 6], [2, 7], [2, 8], [2, 9], [2, 0], [3, 1], [3, 2], [3, 3], [3, 4], [3, 5], [3, 6], [3, 7], [3, 8], [3, 9], [3, 0], [4, 1], [4, 2], [4, 3], [4, 4], [4, 5], [4, 6], [4, 7], [4, 8], [4, 9], [4, 0], [5, 1], [5, 2], [5, 3], [5, 4], [5, 5], [5, 6], [5, 7], [5, 8], [5, 9], [5, 0]] 
+0

글쎄, 아주 단순한 것으로 판명되었습니다) – Anton

0

또한 루프에 대한없이 그것을 할 수 있습니다 :

func combinations<T>(of array: [[T]]) -> [[T]] 
{ 
    return array.reduce([[]]){ c,a in c.flatMap{ e in a.map{e + [$0] } } } 
}