我有两组字符串,我想得到组合的结果
I have two sets of string,I want get result of combination
我有两套
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")
然后你得想办法排列和assemble (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 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")
然后你得想办法排列和assemble (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)