2016-10-06 141 views
1

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

回答

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)

+0

谢谢,那真是我想要的。 – Dmitrii