Умножать элементы списка списков друг на друга

#scala

#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:

Вы можете сделать это с помощью 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 создает список элементов из a, умноженный на текущее значение b

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