我有序列:
val A = Seq(1,3,0,4,2,0,7,0,6)
val B = Seq(8,9,10)
我需要一个新序列,其中第二个序列的值替换了0:
Seq(1,3,8,4,2,9,7,10,6)
如何用功能风格做到这一点?
不确定迭代器是否真正起作用。无论如何,这是另一种选择
val A = Seq(1,3,0,4,2,0,7,0,6)
val B = Seq(8,9,10)
A.foldLeft((B, Seq[Int]())) {case ((b, r), e) =>
if (e == 0 && ! b.isEmpty) (b.tail, b.head +: r) else (b, e +: r) }
._2.reverse
//> res0: Seq[Int] = List(1, 3, 8, 4, 2, 9, 7, 10, 6)
编辑:如果我们不在B元素中,则按注释更新以保留零
编辑2:
模式匹配变体更整洁:
A.foldLeft((B, Seq[Int]())){case ((h +: t, r), 0) => (t, h +: r)
case ((b, r), e) => (b, e +: r)}
._2.reverse
A.mapAccumLeft(B, { case ((h +: t), 0) => (t, h)
case (b, e) => (b, e) }
(可能我没有安装scalaz进行测试)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句