对scala List [List [Int]]中的元素求和

时间:2019-06-11 05:57:37

标签: scala

如何对Scala List[List[Int]]中的元素求和

示例:

val mylist = List(List(1,2,3),List(2,3,4))

输出:

List(List(6),List(9))

1 个答案:

答案 0 :(得分:0)

如果您希望结果列表的类型为List[List[Int]],而不是List[Int],则可以执行以下操作:

mylist.map(l => l.foldLeft(List(0))((acc, el) => List(acc(0) + el)))

由于mylist.map(_.sum)将产生List[Int],因此您也可以这样操作:

mylist.map(_.sum).map(List(_))

如果您真的想在没有scala集合库的情况下实现它,则可以通过递归来实现:

object Appz extends App {
  val mylist: List[List[Int]] = List(List(2,2,3),List(2,3,4))

  def sumSubLists(ll: List[List[Int]]): List[Int] = {

    @annotation.tailrec
    def sumList(l: List[Int], acc: Int = 0): Int = l match {
      case List() => acc
      case h :: t => sumList(t, acc + h)
    }

    @annotation.tailrec
    def sumSubListsInner(ll: List[List[Int]], acc: List[Int]): List[Int] =
      ll match {
        case List() => acc
        case h :: t => sumSubListsInner(t, acc ++ List(sumList(h)))
    }

    sumSubListsInner(ll, List())
  }

  println(sumSubLists(mylist))
}