Arrays 如何在scala中高效地查找多维数组/列表中的所有组合?
我有一个数组 数组(数组(A,B),数组(I,J),数组(M,N),数组(p)) 请帮助找出它们之间的所有可能组合,如下所示。 提前谢谢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 , 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)
.....
欢迎来到堆栈溢出!你试图解决这个问题了吗?如果你有,在你的问题中包括你的代码和研究,以显示哪些不适合你。如果没有,你应该先尝试自己解决它,然后在这里发布代码和研究。这也让别人更容易回答你的问题!