gpt4 book ai didi

Scala:产生折叠的中间结果

转载 作者:行者123 更新时间:2023-12-03 14:30:45 24 4
gpt4 key购买 nike

我曾多次遇到在整个 map 操作中保持状态的问题。想象一下以下任务:

给定一个 List[Int],将每个元素映射到所有前面的元素和它本身的总和。
所以 1,2,3 变成 1, 1+2, 1+2+3。

我想出的一种解决方案是:

scala> val a = 1 to 5                                                
a: scala.collection.immutable.Range.Inclusive with scala.collection.immutable.Range.ByOne = Range(1, 2, 3, 4, 5)

scala> a.foldLeft(List(0)){ case (l,i) => (l.head + i) :: l }.reverse
res3: List[Int] = List(0, 1, 3, 6, 10, 15)

但不知何故,我觉得必须有一个更简单的解决方案。

最佳答案

您正在尝试计算 的序列部分金额 .

计算此类累加的一般操作不是 fold但是 scan ,虽然 scan可以通过 fold 表达以您显示的方式(而 fold 实际上是由 scan 生成的列表的最后一个元素)。

至于Scala,我会给这个example

scala> scanLeft(List(1,2,3))(0)(_ + _)
res1: List[Int] = List(0, 1, 3, 6)

关于Scala:产生折叠的中间结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4469538/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com