Angenommen, wir folgende Listen unterschiedlicher Größe haben:Zip zwei Listen unterschiedlicher Länge mit Standardelement zu füllen
val list1 = ("a", "b", "c")
val list2 = ("x", "y")
Jetzt möchte ich diese 2-Listen verschmelzen und eine neue Liste mit den String-Elementen erstellen verkettet werden :
val desiredResult = ("ax", "by", "c")
ich versuchte
val wrongResult = (list1, list2).zipped map (_ + _)
als here vorgeschlagen, Dies funktioniert jedoch nicht wie vorgesehen, da zip die Elemente der längeren Liste verwirft, die nicht zugeordnet werden können.
Wie kann ich dieses Problem lösen? Gibt es eine Möglichkeit, die Listen zu komprimieren und ein "Standardelement" (wie die leere Zeichenfolge in diesem Fall) zu geben, wenn eine Liste länger ist?
Ich denke, es gibt immer etwas, von dem man nichts weiß. –
Danke! Nun funktioniert es mit dieser Lösung: 'list1.zipAll (list2," "," ") map ({case (y, x) => y + x})' aber nicht wie vorher mit 'list1.zipAll (list2," "," ") map (_ + _)'. Warum kann ich die kurze Syntax mit dem ZipAll nicht wie die Zip-Funktion verwenden? – ForceOfWill
@ForceOfWill: '(list1, list2) .zipped' gibt ein' Tuple2Zipped' zurück, wobei ['.map'] (http://www.scala-lang.org/api/current/index.html#scala.runtime .Tuple2Zipped @ map [B, Bis] (f: (El1, El2) => B) (implizitcbf: scala.collection.generic.CanBuildFrom [Repr1, B, To]): To) nimmt ein 'f: (El1, El2) => B' (dh eine Funktion, die 2 Argumente akzeptiert). 'List [A]' s '.map' nimmt ein' f: A => B', dh nur 1 Argument (was in diesem Fall ein 'Tuple2' ist). Leider bedeutet dies, dass '_ + _' (was eine Funktion ist, die 2 Argumente benötigt) hier nicht angewendet werden kann. – Marth