如何在 Scala 中有效地找到多维 array/list 中的所有组合?

How to efficiently find all combinations in a multi dimensional array/list in scala?

我有一个数组,

数组(数组(A,B),数组(I,J),数组(M,N),数组(P))

请大家帮忙找出所有可能的组合如下。 提前致谢。

 ( A , I )
 ( A , J )  
 ( B , I )  
 ( B , J )  
 ( A , M )  
 ( B , M )  
 ( B , N )  
 ( A , P )  
 ( B , P )  
 ( I , M )  
 ( I , N )  
 ( J , M )  
 ( J , N )  
 ( I , P )  
 ( J , P )  
 ( M , P )  
 ( N , P )  
 ( A , I , M )
 ( A , I , N )
 ( A , J , M )
 ( A , J , N )
 ( B , I , M )
 ( B , I , N )
 ( B , J , M )
 ( B , J , N )
 ( A , I , P )
 ( A , J , P )
 ( B , I , P )
 ( B , J , P )
 ( A , M , P )
 ( A , N , P )
 ( B , M , P )
 ( B , N , P )
 ( I , M , P )
 ( I , N , P )
 ( J , M , P )
 ( J , N , P )

这样做就可以了:

val input = List(List("A", "B"), List("I", "J"), List("M", "N"), List("P"))

val result =
  (2 to input.size).toList.flatMap {
    combSize => input.combinations(combSize).flatMap {
      comb =>
        comb.dropRight(1).foldRight(comb.takeRight(1).transpose) {
          (el, accum) =>
            accum.flatMap(accEl => el.map(_ :: accEl))
        }
    }.toList
  }

结果:

List(A, I)
List(B, I)
List(A, J)
List(B, J)
List(A, M)
List(B, M)
List(A, N)
List(B, N)
List(A, P)
List(B, P)
List(I, M)
List(J, M)
List(I, N)
List(J, N)
List(I, P)
List(J, P)
List(M, P)
List(N, P)
List(A, I, M)
List(B, I, M)
List(A, J, M)
List(B, J, M)
List(A, I, N)
List(B, I, N)
List(A, J, N)
List(B, J, N)
List(A, I, P)
List(B, I, P)
List(A, J, P)
List(B, J, P)
List(A, M, P)
List(B, M, P)
List(A, N, P)
List(B, N, P)
List(I, M, P)
.....