1
的兩個陣列我有兩個Seq[Array[Byte]]
數組:對於-理解爲相同的長度
var o1: Seq[Array[Byte]]
var o2: Seq[Array[Byte]]
//...
我需要發生變異陣列的o1
SEQ使得o1
每個陣列被替換的陣列o2
的相同位置iffo2
的數組具有非零長度。
是否有可能與理解?
的兩個陣列我有兩個Seq[Array[Byte]]
數組:對於-理解爲相同的長度
var o1: Seq[Array[Byte]]
var o2: Seq[Array[Byte]]
//...
我需要發生變異陣列的o1
SEQ使得o1
每個陣列被替換的陣列o2
的相同位置iffo2
的數組具有非零長度。
是否有可能與理解?
這似乎是爲zip
o1 zip o2 map { case (l, r) => if(r.nonEmpty) r else l }
如果你不喜歡o1 zip o2
創建中間序列,你可以用懶洋洋的迭代器構建的組合更好的工作:
(o1.iterator zip o2.iterator map { case (l, r) => if(r.nonEmpty) r else l }).toList
如果你真的想要變異,首先確保使用collection.mutable.IndexedSeq
,因爲它的mu定量方法(update
)取一個索引。如果你試圖改變一般的Seq
,你可能會因爲鏈接列表ish結構而得到O(n)更新。
for {
(replacement, index) <- o2.iterator.zipWithIndex
if replacement.nonEmpty
} o1(index) = replacement
這其實是類似的東西只是語法糖:
o2.iterator.zipWithIndex.foreach {
case (replacement, index) =>
if(replacement.nonEmpty) o1.update(index, replacement)
}