2016-10-06 2 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)) 

этот метод для каждого элемента Ь создает список элементов из умноженных на текущем значение б

Теперь мы можем применить эта процедура ко всем элементам списка списков, давая ей начальное значение List (1)

+0

спасибо, это действительно то, что я хочу. – Dmitrii

Смежные вопросы