列表元素的所有组合,而每个元素保持位置

时间:2018-05-08 20:11:12

标签: scala list combinations

我是Scala的绝对初学者,我想生成列表元素的所有可能组合,但每个元素都在列表中保持其位置。

例如,如果我有列表列表(1,1),我想得到这样的内容:

List(1,1)

List(1,*)

List(*,1)

List(*,*)

其中*表示不参与当前组合的元素。

提前致谢。

1 个答案:

答案 0 :(得分:3)

定义

def f(xs: List[Char]): List[List[Char]] = xs match {
  case Nil => List(Nil)
  case h :: t => for (y <- List(h, '*'); ys <- f(t)) yield y :: ys
}

这里:

f("1123".toList) foreach println

给出:

List(1, 1, 2, 3)
List(1, 1, 2, *)
List(1, 1, *, 3)
List(1, 1, *, *)
List(1, *, 2, 3)
List(1, *, 2, *)
List(1, *, *, 3)
List(1, *, *, *)
List(*, 1, 2, 3)
List(*, 1, 2, *)
List(*, 1, *, 3)
List(*, 1, *, *)
List(*, *, 2, 3)
List(*, *, 2, *)
List(*, *, *, 3)
List(*, *, *, *)