(在多個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