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

时间:2013-03-12 12:49:21

标签: scala tuples seq

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

A
B
C
D
E

我正在寻找一种优雅的方法来构建像这样的“滞后”元组:

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

2 个答案:

答案 0 :(得分:11)

最简单的方法是使用tailzip

val xs = Seq('A', 'B', 'C', 'D', 'E')
xs zip xs.tail

如果效率是一个问题(即你不想通过调用tail创建一个额外的中间序列而你使用的Seq不是List s,这意味着{{ 1}}取O(n)然后你可以使用views:

tail

答案 1 :(得分:6)

我不太确定它有多优雅,但这至少适用于所有超过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))

如果你想要比这更优雅的东西,我建议你看一下Shapeless在列表和元组之间转换的好方法。