(在多个SEQ映射)假设我有zipWith Scala中
val foo : Seq[Double] = ...
val bar : Seq[Double] = ...
,我希望以产生SEQ其中巴兹(ⅰ)= FOO(ⅰ)+巴(i)中。我能想到的办法之一是
val baz : Seq[Double] = (foo.toList zip bar.toList) map ((f: Double, b : Double) => f+b)
然而,这种感觉既丑陋和低效 - 我要两到seqs列表(与惰性列表爆炸)转换,创建的元组这个临时列表中,只能映射它并让它被GCed。也许流解决懒惰的问题,但无论如何,这感觉像不必要的丑陋。在lisp中,映射函数可以映射多个序列。我会写
(mapcar (lambda (f b) (+ f b)) foo bar)
并没有临时列表将创建任何地方。在Scala中是否有一个map-over-multiple-lists函数,还是zip与解构结合在一起真的是“正确”的方法?
对不起,在Scala 2.8上没有zipWith。 – 2009-12-02 12:21:04
为了清楚(我敢肯定Daniel会同意),Scala没有什么可以为此道歉的 - 你用Scala得到的更好。请参阅下面的Martin的答案和Daniel的答案。如果有人能让马丁成为这个问题的核准答案,那将是非常好的...... – AmigoNico 2012-08-12 04:56:22