如何对Scala List[List[Int]]
中的元素求和
示例:
val mylist = List(List(1,2,3),List(2,3,4))
输出:
List(List(6),List(9))
答案 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))
}