2017-06-07 2 views

Antwort

5

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) 
} 
Verwandte Themen