我想创建一个包含元组的Scala序列。输入是一个文本文件,如下所示:
A
B
C
D
E
我正在寻找一种优雅的方法来构建像这样的“滞后”元组:
(A, B), (B, C), (C, D), (D, E)
答案 0 :(得分:11)
最简单的方法是使用tail
和zip
:
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在列表和元组之间转换的好方法。