Arrays 如何在scala中高效地查找多维数组/列表中的所有组合?

Arrays 如何在scala中高效地查找多维数组/列表中的所有组合?,arrays,scala,combinations,Arrays,Scala,Combinations,我有一个数组 数组(数组(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 )

我有一个数组

数组(数组(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)
.....

欢迎来到堆栈溢出!你试图解决这个问题了吗?如果你有,在你的问题中包括你的代码和研究,以显示哪些不适合你。如果没有,你应该先尝试自己解决它,然后在这里发布代码和研究。这也让别人更容易回答你的问题!