Scala: как суммировать список кортежей

учитывая следующий список кортежей...

val list = List((1, 2), (1, 2), (1, 2))

... как суммировать все значения и получить один кортеж, подобный этому?

(3, 6)

2 ответов


С помощью foldLeft метод. Посмотрите, пожалуйста scaladoc для получения дополнительной информации.

scala> val list = List((1, 2), (1, 2), (1, 2))
list: List[(Int, Int)] = List((1,2), (1,2), (1,2))

scala> list.foldLeft((0, 0)) { case ((accA, accB), (a, b)) => (accA + a, accB + b) }
res0: (Int, Int) = (3,6)

используя unzip. Не так эффективно, как вышеупомянутое решение. Возможно, более читабельным.

scala> list.unzip match { case (l1, l2) => (l1.sum, l2.sum) }
res1: (Int, Int) = (3,6) 

очень просто: (list.map(_._1).sum, list.map(_._2).sum).