34 Stimmen

zipWith (Mapping über mehrere Seq) in Scala

Angenommen, ich habe

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

und ich möchte eine Sequenz erzeugen, bei der baz(i) = foo(i) + bar(i) ist. Eine Möglichkeit, die mir dazu einfällt, ist

val baz : Seq[Double] = (foo.toList zip bar.toList) map ((f: Double, b : Double) => f+b)

Dies fühlt sich jedoch sowohl hässlich und ineffizient - ich habe zu konvertieren beide seqs zu Listen (die mit Lazy-Listen explodiert), erstellen Sie diese temporäre Liste von Tupeln, nur um es zuzuordnen und lassen Sie es GCed werden. Vielleicht lösen Streams das lazy-Problem, aber auf jeden Fall fühlt sich das unnötig hässlich an. In Lisp würde die map-Funktion über mehrere Sequenzen abbilden. Ich würde schreiben

(mapcar (lambda (f b) (+ f b)) foo bar)

Und es würden nirgendwo temporäre Listen erstellt werden. Gibt es eine map-over-multiple-Listen-Funktion in Scala, oder ist zip kombiniert mit Destrukturierung wirklich der "richtige" Weg, dies zu tun?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X