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

时间:2017-11-14 17:24:28

标签: 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"} 

我该怎么做这个功能。 非常感谢

1 个答案:

答案 0 :(得分:1)

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

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)