Scala 将列表缩放为具有一个共享元素的列表元组

Scala 将列表缩放为具有一个共享元素的列表元组,scala,functional-programming,Scala,Functional Programming,拆分列表的简短功能方法是什么 List(1, 2, 3, 4, 5) into List((1,2), (2, 3), (3, 4), (4, 5)) 您可以zip带尾部的列表: (假设您不关心嵌套对是否是列表而不是元组) Scala集合具有滑动窗口功能: @ val lazyWindow = List(1, 2, 3, 4, 5).sliding(2) lazyWindow: Iterator[List[Int]] = non-empty iterator 要实现收集: @ lazyWin

拆分列表的简短功能方法是什么

List(1, 2, 3, 4, 5) into List((1,2), (2, 3), (3, 4), (4, 5))

您可以
zip
带尾部的列表:

(假设您不关心嵌套对是否是列表而不是元组)

Scala集合具有滑动窗口功能:

@ val lazyWindow = List(1, 2, 3, 4, 5).sliding(2)
lazyWindow: Iterator[List[Int]] = non-empty iterator
要实现收集:

@ lazyWindow.toList
res1: List[List[Int]] = List(List(1, 2), List(2, 3), List(3, 4), List(4, 5))
您甚至可以创建更多“funcy”窗口,如长度为3的窗口,但步骤2:

@ List(1, 2, 3, 4, 5).sliding(3,2).toList
res2: List[List[Int]] = List(List(1, 2, 3), List(3, 4, 5))

我一直是模式匹配的超级粉丝。所以你也可以做:

val list = List(1, 2, 3, 4, 5, 6)

  def splitList(list: List[Int], result: List[(Int, Int)] = List()): List[(Int, Int)] = {
    list match {
      case Nil => result
      case x :: Nil => result
      case x1 :: x2 :: ls => splitList(x2 :: ls, result.:+(x1, x2))
    }
  }

  splitList(list)
  //List((1,2), (2,3), (3,4), (4,5), (5,6))
val list = List(1, 2, 3, 4, 5, 6)

  def splitList(list: List[Int], result: List[(Int, Int)] = List()): List[(Int, Int)] = {
    list match {
      case Nil => result
      case x :: Nil => result
      case x1 :: x2 :: ls => splitList(x2 :: ls, result.:+(x1, x2))
    }
  }

  splitList(list)
  //List((1,2), (2,3), (3,4), (4,5), (5,6))