列表内列表之间的笛卡尔积

use*_*968 1 functional-programming scala cartesian-product

输入:

[[a,b,c],
[d,e,],
[f,g,h]
]
Run Code Online (Sandbox Code Playgroud)

期望的输出:

[
[a,d,f],[a,d,g],[a,d,h],.......[c,e,h]
].
Run Code Online (Sandbox Code Playgroud)

你会如何在 Scala 中做到这一点?

编辑:包含每个字母的单个列表的大小以及包含该列表的列表的大小是随机的。包含字母的列表可以有不同的大小

jwv*_*wvh 5

这对于元素类型是通用的,但对于集合类型是特定的,即List.

def cProd[T](in: List[List[T]]): List[List[T]] =
  in.foldRight(List(List.empty[T])) {
    for {word <- _ ; sentence <- _} yield word :: sentence
  }
Run Code Online (Sandbox Code Playgroud)

它可以使集合类型更通用,但您可能会失去一些List优化。