假设我有
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 都转换为列表(它会随着惰性列表爆炸),创建这个临时的元组列表,只是为了映射它并让它被 GCed。也许流解决了懒惰的问题,但无论如何,这感觉都太丑陋了。在 lisp 中,map 函数将映射到多个序列。我会写
(mapcar (lambda (f b) (+ f b)) foo bar)
并且不会在任何地方创建临时列表。在 Scala 中是否有 map-over-multiple-lists 函数,或者 zip 与解构相结合真的是“正确”的方法吗?