在scala中压缩不等长度列表

时间:2014-04-09 21:41:29

标签: scala functional-programming scala-collections zipper

我想要这样的事情:

def unequalZip[A, B](a: Iterable[A], b: Iterable[B]) = Iterable[(Option[A], Option[B])]

其中较短的iterable中的项目与使用None s的较长可迭代项目相匹配

3 个答案:

答案 0 :(得分:7)

你想要

a.zipAll(b, None, None)

如果您已有选项,或

a.map(x => Option(x)).zipAll(b.map(x => Option(x)), None, None)

否则。

答案 1 :(得分:2)

def lift[A](a: Iterable[A]) = a map {Option.apply} def unequalZip[A, B](a: Iterable[A], b: Iterable[B]) = lift(a).zipAll(lift(b), None, None)

答案 2 :(得分:0)

看一下zipAll。

  

/ **返回从$ coll和另一个iterable形成的$ coll   集合*通过成对组合相应的元素。 *   如果两个系列中的一个比另一个短,*   占位符元素用于将较短的集合扩展为   长度更长。