创建包含滞后元组的Scala序列的优雅方法

创建包含滞后元组的Scala序列的优雅方法,scala,tuples,seq,Scala,Tuples,Seq,我想创建一个包含元组的Scala序列。输入是如下所示的文本文件: A B C D E (A, B), (B, C), (C, D), (D, E) 我正在寻找一种优雅的方法来构造“滞后”元组,如下所示: A B C D E (A, B), (B, C), (C, D), (D, E) 我不确定它有多优雅,但这至少适用于包含1个以上元素的所有列表: val l = List('A,'B,'C,'D,'E,'F) val tupled = l.sliding(2).map{case x ::

我想创建一个包含元组的Scala序列。输入是如下所示的文本文件:

A
B
C
D
E
(A, B), (B, C), (C, D), (D, E)
我正在寻找一种优雅的方法来构造“滞后”元组,如下所示:

A
B
C
D
E
(A, B), (B, C), (C, D), (D, E)

我不确定它有多优雅,但这至少适用于包含1个以上元素的所有列表:

val l = List('A,'B,'C,'D,'E,'F)
val tupled = l.sliding(2).map{case x :: y :: Nil => (x,y)}

tupled.toList
// res8: List[(Symbol, Symbol)] = List(('A,'B), ('B,'C), ('C,'D), ('D,'E), ('E,'F))

如果您想要更优雅的东西,我建议您寻找在列表和元组之间转换的好方法。

最简单的方法是使用
尾部和
邮政编码:

val xs = Seq('A', 'B', 'C', 'D', 'E')
xs zip xs.tail
如果效率是一个问题(即,您不想通过调用
tail
创建额外的中间序列,并且您使用的
Seq
不是
List
s,这意味着
tail
需要O(n)),那么您可以使用视图:

xs zip xs.view.tail

事实上,@axel22的回答比我的好得多!将其保留在此处仅供参考。
滑动
(不带映射代码)会生成列表而不是元组,这也可以。如果
Seq
实际上是一个
列表,那么
xs-zip-xs.tail
非常有效。确切地说,在这种情况下,应该比使用视图更有效。