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