我是Scala的绝对初学者,我想生成列表元素的所有可能组合,但每个元素都在列表中保持其位置。
例如,如果我有列表列表(1,1),我想得到这样的内容:
List(1,1)
List(1,*)
List(*,1)
List(*,*)
其中*表示不参与当前组合的元素。
提前致谢。
答案 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(*, *, *, *)