How to sum a list of tuples

前端 未结 5 1366
囚心锁ツ
囚心锁ツ 2021-01-02 04:06

Given the following list of tuples...

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

... how do I sum all the values and obtain a single tuple lik

相关标签:
5条回答
  • 2021-01-02 04:42

    Scalaz solution (suggestied by Travis and for some reason a deleted answer):

    import scalaz._
    import Scalaz._
    
    val list = List((1, 2), (1, 2), (1, 2))
    list.suml
    

    which outputs

    res0: (Int, Int) = (3,6)
    
    0 讨论(0)
  • 2021-01-02 04:47

    answering to this question while trying to understand aggregate function in spark

    scala> val list = List((1, 2), (1, 2), (1, 2))
    list: List[(Int, Int)] = List((1,2), (1,2), (1,2))
    
       scala>  list.aggregate((0,0))((x,y)=>((y._1+x._1),(x._2+y._2)),(x,y)=>(x._1+y._2,y._2+x._2))
    res89: (Int, Int) = (3,6)
    

    Here is the link to the SO QA that helped to understand and answer this [Explain the aggregate functionality in Spark

    0 讨论(0)
  • 2021-01-02 04:48

    Using the foldLeft method. Please look at the scaladoc for more information.

    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)
    

    Using unzip. Not as efficient as the above solution. Perhaps more readable.

    scala> list.unzip match { case (l1, l2) => (l1.sum, l2.sum) }
    res1: (Int, Int) = (3,6) 
    
    0 讨论(0)
  • 2021-01-02 04:53

    You can solve this using Monoid.combineAll from the cats library:

    import cats.instances.int._ // For monoid instances for `Int`
    import cats.instances.tuple._  // for Monoid instance for `Tuple2`
    import cats.Monoid.combineAll
    
      def main(args: Array[String]): Unit = {
    
        val list = List((1, 2), (1, 2), (1, 2))
    
        val res = combineAll(list)
    
        println(res)
        // Displays
        // (3, 6)
      }
    

    You can see more about this in the cats documentation or Scala with Cats.

    0 讨论(0)
  • 2021-01-02 05:01

    Very easy: (list.map(_._1).sum, list.map(_._2).sum).

    0 讨论(0)
提交回复
热议问题