如何将整数列表相加并将每个步骤保存到新列表?

时间:2017-02-03 14:36:41

标签: scala functional-programming

我努力寻找简单功能的转化方法

val ints = List(1, 2, 3, 4, 5) into List(1, 3, 6, 10, 15)

怎么做?

5 个答案:

答案 0 :(得分:10)

此操作称为prefix sum, cumulative sum, or inclusive scan,更通用的高阶函数通常称为table(groupname,var1)。 Scala提供scan作为其集合库的一部分:

scan

答案 1 :(得分:0)

您可以使用foldLeft,如下所示:

scala> List(1,2,3,4,5).foldLeft(List.empty[Int]) { case (acc, next) =>
     |   acc :+ next + acc.lastOption.getOrElse(0)
     | }
res6: List[Int] = List(1, 3, 6, 10, 15)

在部分功能(acc, next)中,acc是当前累积的列表,以List.empty[Int]开头,next是提供的列表中的下一个值,以{开头{1}}。

答案 2 :(得分:0)

ints.foldLeft(List[Int]())((acc,elem)=>elem+acc.headOption.getOrElse(0)::acc)

答案 3 :(得分:0)

哦,继续,另一种给猫皮肤涂抹的方法:

ints.drop(1).foldLeft(List(ints.head))((acc,elem)=>elem+acc.head::acc).reverse

答案 4 :(得分:0)

感谢李回答我将其修改为

ints.tail.scan(ints.head)(_ + _)

稍长一点,但它将第一个元素视为初始状态。