将列表列表的元素相互相乘

时间:2016-10-06 05:26:09

标签: scala

我有列表列表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]

返回

1 个答案:

答案 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)