Dies scheint eine bessere Arbeit für zip
o1 zip o2 map { case (l, r) => if(r.nonEmpty) r else l }
Wenn Sie die Zwischen seq mit o1 zip o2
nicht mögen zu schaffen, könnten Sie gemächlich die kombination mit Iteratoren aufbauen:
(o1.iterator zip o2.iterator map { case (l, r) => if(r.nonEmpty) r else l }).toList
Wenn Sie wirklich wollen mutieren, stellen Sie zuerst sicher, ein collection.mutable.IndexedSeq
seit seiner mu zu verwenden Tation-Methode (update
) nimmt einen Index. Wenn Sie versuchen, einen allgemeinen Seq
zu mutieren, erhalten Sie möglicherweise O (n) -Updates aufgrund von verketteten list-ish-Strukturen.
for {
(replacement, index) <- o2.iterator.zipWithIndex
if replacement.nonEmpty
} o1(index) = replacement
Dies ist eigentlich nur Syntax Zucker für so etwas wie:
o2.iterator.zipWithIndex.foreach {
case (replacement, index) =>
if(replacement.nonEmpty) o1.update(index, replacement)
}