我有列表列表List[List[Int] to n]
和Lists[Int]
具有不同的大小,我希望将它们之间的所有值相乘。
对于列表(列表(1,2,3),列表(4,5),列表(6)),它将是
1 * 4 * 6,1 * 5 * 6,2 * 4 * 6,2 * 5 * 6,3 * 4 * 6,3 * 5 * 6
依此类推,并将结果作为结果值列表List[24, 30, 48, 60, 72, 90]
答案 0 :(得分:4)
你可以这样使用foldLeft:
list.foldLeft(List(1)) {
case (acc, item) => acc.flatMap(v => item.map(_*v))
}
解释
让我们定义方法,产生两个列表对的所有可能的乘法:
def mul(a:List[Int], b:List[Int]) = b.flatMap (item => a.map(_*item))
b中每个项目的此方法会生成一个项目列表,其中包含乘以当前值b
现在我们可以将此过程应用于列表列表的所有元素,给它初始值List(1)