gpt4 book ai didi

scala - 在Scala中,如何折叠列表并返回中间结果?

转载 作者:行者123 更新时间:2023-12-03 08:51:19 25 4
gpt4 key购买 nike

我有一个当月的天数 list :

val days = List(31, 28, 31, ...)

我需要返回一个累积天数的列表:
val cumDays = List(31, 59, 90)

我想过使用fold运算符:
(0 /: days)(_ + _)

但这只会返回最终结果(365),而我需要中间结果列表。

无论如何,我都能做到优雅吗?

最佳答案

Scala 2.8的方法scanLeftscanRight可以做到这一点。

对于2.7,您可以这样定义自己的scanLeft:

def scanLeft[a,b](xs:Iterable[a])(s:b)(f : (b,a) => b) =
xs.foldLeft(List(s))( (acc,x) => f(acc(0), x) :: acc).reverse

然后像这样使用它:
scala> scanLeft(List(1,2,3))(0)(_+_)
res1: List[Int] = List(0, 1, 3, 6)

关于scala - 在Scala中,如何折叠列表并返回中间结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3224935/

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