2016-10-06 173 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