在Scala中将列表分为两部分

时间:2019-01-18 23:45:46

标签: scala

我有一个n为3 ls的List作为List(a,b,c,d,e)我的查询是为我想要的(3,List(a,b,c,d,e))编码将其分为两部分,例如List(a,b,c),List(d,e)。为此,scala程序如下所示。 我不懂val(pre,post)。为什么使用它,以及我们从中得到什么?有人可以详细说明吗?

def splitRecursive[A](n: Int, ls: List[A]): (List[A], List[A]) = (n, ls) match {
    case (_, Nil)       => (Nil, Nil)
    case (0, list)      => (Nil, list)
    case (n, h :: tail) => {
      val (pre, post) = splitRecursive(n - 1, tail)
      (h :: pre, post)
    }
  }

1 个答案:

答案 0 :(得分:2)

您的splitRecursive函数返回一对列表。要从这两个列表中删除两个列表,您可以像这样获取它们:

val result = splitRecursive(n - 1, tail)
val pre = result._1
val post = result._2

或者您可以使用解构来获取它们,而无需首先将对绑定到result。这就是splitRecursive中的语法。

val (pre, post) = splitRecursive(n - 1, tail)

这是从一对元素(或其他可以分解的结构)中取出元素的简便方法。