加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Scala:产生一个折叠的中间结果

发布时间:2020-12-16 09:30:41 所属栏目:安全 来源:网络整理
导读:我遇到了几次在地图操作中维护状态的问题。想象下列任务: 给定列表[Int],将每个元素映射到所有先前元素和本身的总和。 所以1,2,3变为1,1 2,1 2 3。 我想出的一个解决方案是: scala val a = 1 to 5 a: scala.collection.immutable.Range.Inclusive with
我遇到了几次在地图操作中维护状态的问题。想象下列任务:

给定列表[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,3,4,5)

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

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

解决方法

您正在尝试计算部分和的序列。

用于计算这种累积的一般操作不是折叠,而是scan,尽管扫描可以通过折叠的方式显示(并且折叠实际上是由扫描产生的列表的最后一个元素)。

至于Scala,我会给这个example

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读