gpt4 book ai didi

scala - Scala中任意数量列表的叉积

转载 作者:行者123 更新时间:2023-12-04 17:11:00 25 4
gpt4 key购买 nike

我在 Scala 中有一个列表列表,如下所示。

val inputList:List[List[Int]] = List(List(1, 2), List(3, 4, 5), List(1, 9))

我想要所有子列表的交叉产品列表。
val desiredOutput: List[List[Int]] = List( 
List(1, 3, 1), List(1, 3, 9),
List(1, 4, 1), List(1, 4, 9),
List(1, 5, 1), List(1, 5, 9),
List(2, 3, 1), List(2, 3, 9),
List(2, 4, 1), List(2, 4, 9),
List(2, 5, 1), List(2, 5, 9))

inputList 和子列表中的元素数量不固定。 Scala 这样做的方法是什么?

最佳答案

这是一种使用递归的方法。然而,它不是尾递归的,所以要小心计算器溢出。然而,它可以通过使用辅助函数转换为尾递归函数。

def getProduct(input:List[List[Int]]):List[List[Int]] = input match{
case Nil => Nil // just in case you input an empty list
case head::Nil => head.map(_::Nil)
case head::tail => for(elem<- head; sub <- getProduct(tail)) yield elem::sub
}

测试:
scala> getProduct(inputList)
res32: List[List[Int]] = List(List(1, 3, 1), List(1, 3, 9), List(1, 4, 1), List(1, 4, 9), List(1, 5, 1), List(1, 5, 9), List(2, 3, 1), List(2, 3, 9), List(2, 4, 1), List(2, 4, 9), List(2, 5, 1), List(2, 5, 9))

关于scala - Scala中任意数量列表的叉积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13567543/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com