假设我有
val foo : Seq[Double] = ...
val bar : Seq[Double] = ...
Run Code Online (Sandbox Code Playgroud)
我希望产生一个seq,其中baz(i)= foo(i)+ bar(i).我能想到的一种方法是
val baz : Seq[Double] = (foo.toList zip bar.toList) map ((f: Double, b : Double) => f+b)
Run Code Online (Sandbox Code Playgroud)
然而,这感觉既丑陋又低效 - 我必须将seqs转换为列表(使用惰性列表进行爆炸),创建此临时元组列表,仅映射它并让它进行GCed.也许溪流解决了懒惰的问题,但无论如何,这感觉就像不必要的丑陋.在lisp中,map函数将映射多个序列.我会写的
(mapcar (lambda (f b) (+ f b)) foo bar)
Run Code Online (Sandbox Code Playgroud)
并且不会在任何地方创建临时列表.在Scala中是否存在map-over-multiple-lists函数,或者zip是否与解构相结合实际上是"正确"的方法?