35

我正在尝试将 Scala 列表List(1,2,3,4)拆分成对(1,2) (2,3) (3,4),有什么简单的方法可以做到这一点?

4

3 回答 3

80
val xs = List(1,2,3,4)
xs zip xs.tail
  // res1: List[(Int, Int)] = List((1,2), (2,3), (3,4))

正如文档所说,zip

通过成对组合相应的元素,返回由该列表和另一个可迭代集合形成的列表。如果两个集合中的一个比另一个长,则忽略其剩余元素。

所以List('a,'b,'c,'d)zipped with List('x,'y,'z)is List(('a,'x), ('b,'y), ('c,'z))with the final 'dof the first one 忽略。

从您的示例中,tail您可以看到它们是如何成对压缩在一起的List(1,2,3,4)List(2,3,4)

于 2012-06-28T16:45:45.143 回答
16

要生成对列表(即元组),试试这个

List(1,2,3,4,5).sliding(2).collect{case List(a,b) => (a,b)}.toList
于 2012-06-28T16:34:59.613 回答
9
List(1,2,3,4).sliding(2).map(x => (x.head, x.tail.head)).toList
res0: List[(Int, Int)] = List((1,2), (2,3), (3,4))
于 2012-06-28T17:01:33.443 回答