gpt4 book ai didi

scala - Scala中的zipWith(映射多个Seq)

转载 作者:行者123 更新时间:2023-12-04 17:55:13 25 4
gpt4 key购买 nike

假设我有

val foo : Seq[Double] = ...
val bar : Seq[Double] = ...

我想产生一个序列,其中baz(i)= foo(i)+ bar(i)。我可以想到的一种方法是
val baz : Seq[Double] = (foo.toList zip bar.toList) map ((f: Double, b : Double) => f+b)

但是,这既难看又效率低下-我必须将两个seq都转换为列表(它会随着懒惰的列表而爆炸),创建此元组的临时列表,仅在其上进行映射并使其成为GC。也许流解决了这个懒惰的问题,但是在任何情况下,这都感觉是不必要的丑陋。简而言之,映射功能将映射多个序列。我会写
(mapcar (lambda (f b) (+ f b)) foo bar)

而且任何地方都不会创建临时列表。 Scala中是否有一个map-over-multi-lists函数,或者zip与解构结合确实是实现此目的的“正确”方法吗?

最佳答案

您想要的函数称为zipWith,但它不是标准库的一部分。它将是2.8版(更新:显然不是,请参见注释)。

foo zipWith((f: Double, b : Double) => f+b) bar

参见 this Trac ticket

关于scala - Scala中的zipWith(映射多个Seq),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1157564/

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