我需要在Scala中实现一个"zipLongest"函数;即将两个序列组合成一对,如果其中一个序列比另一个序列长,则使用默认值。(与标准的
我直接按以下方式实现:
zip
方法不同,后者只会截断到最短的序列。)我直接按以下方式实现:
def zipLongest[T](xs: Seq[T], ys: Seq[T], default: T): Seq[(T, T)] = (xs, ys) match {
case (Seq(), Seq()) => Seq()
case (Seq(), y +: rest) => (default, y) +: zipLongest(Seq(), rest, default)
case (x +: rest, Seq()) => (x, default) +: zipLongest(rest, Seq(), default)
case (x +: restX, y +: restY) => (x, y) +: zipLongest(restX, restY, default)
}
有更好的方法吗?