Scala 我有两组字符串,我想得到组合的结果

Scala 我有两组字符串,我想得到组合的结果,scala,set,combinatorics,Scala,Set,Combinatorics,我有两套 val set1 = { "A", "B", "C" } val Set2 = { "all", "all", "all" } //I want get this result : result[0]={"A", "B", "C"} result[1]={"all", "B", "C"} result[2]={"a", "all", "C"} ... result[n]={"all", "all", "all"} 我怎样才能完成这个功能。 非常感谢我不知道这是不是最有效的方

我有两套

val set1 = { "A", "B", "C" }
val Set2 = { "all", "all", "all" }

//I want get this result :
result[0]={"A", "B", "C"} 
result[1]={"all", "B", "C"} 
result[2]={"a", "all", "C"}
... 
result[n]={"all", "all", "all"} 
我怎样才能完成这个功能。
非常感谢

我不知道这是不是最有效的方法。首先要压缩这两个序列,因为它们的元素应该始终对齐

val seq1 = List("A", "B", "C")
val seq2 = List("all", "all", "all")

val z = seq1 zip seq2 // -> List("A" -> "all", "B" -> "all", "C" -> "all")
然后,您必须找到一种方法来排列和组装(
flatMap
)所有可能:

def build[A](in: List[(A, A)]): List[List[A]] = in match {
  case Nil => List(Nil)
  case (a, b) :: tail =>
     val tr = build(tail)
     tr.flatMap(xs => List(a :: xs, b :: xs))
}

build(z).foreach(println)

// ->
// List(A, B, C)
// List(all, B, C)
// List(A, all, C)
// List(all, all, C)
// List(A, B, all)
// List(all, B, all)
// List(A, all, all)
// List(all, all, all)

我不知道这是不是最有效的方法。首先要压缩这两个序列,因为它们的元素应该始终对齐

val seq1 = List("A", "B", "C")
val seq2 = List("all", "all", "all")

val z = seq1 zip seq2 // -> List("A" -> "all", "B" -> "all", "C" -> "all")
然后,您必须找到一种方法来排列和组装(
flatMap
)所有可能:

def build[A](in: List[(A, A)]): List[List[A]] = in match {
  case Nil => List(Nil)
  case (a, b) :: tail =>
     val tr = build(tail)
     tr.flatMap(xs => List(a :: xs, b :: xs))
}

build(z).foreach(println)

// ->
// List(A, B, C)
// List(all, B, C)
// List(A, all, C)
// List(all, all, C)
// List(A, B, all)
// List(all, B, all)
// List(A, all, all)
// List(all, all, all)

这是输出,不是我们想要的
List(a,b,c,all)List(all,b,c,all)List(a,all,c,all)List(all,all,c,all)
@lemanli道歉;我一定发布了一个错误的版本,因为我肯定有正确的输出;我现在编辑的是正确的版本。我很佩服你,你很强壮。我做了另一个版本,但它是复杂的如何结束问题,我找不到要做什么这是输出,这不是我们想要的
List(a,b,c,all)List(all,b,c,all)List(a,all,c,all)List(all,all,c,all)
@lemanli道歉;我一定发布了一个错误的版本,因为我肯定有正确的输出;我现在编辑的是正确的版本。我很佩服你,你很强壮。我做了另一个版本,但它很复杂如何结束这个问题,我找不到该做什么