问题描述
输入:
[[a,b,c],[d,e,],[f,g,h]
]
所需的输出:
[
[a,d,f],[a,g],h],.......[c,h]
].
您将如何在Scala中做到这一点?
编辑:包含每个字母的单个列表的大小和包含列表的列表的大小是随机的。包含字母的列表可以具有不同的大小
解决方法
这对于元素类型是通用的,但对于集合类型(即List
)是特定的。
def cProd[T](in: List[List[T]]): List[List[T]] =
in.foldRight(List(List.empty[T])) {
for {word <- _ ; sentence <- _} yield word :: sentence
}
对于集合类型,它可以变得更通用,但您可能会放弃一些List
优化。
将猫与列表一起使用:
import cats.Semigroupal
import cats.instances.list._
Semigroupal[List]
.product(Semigroupal[List]
.product(List("a","b","c"),List("d","e","")),(List("f","g","h")))
.flatten {case ((a,b),c) => List((a,b,c))}