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