我想创建一个包含元组的 Scala 序列。输入是这样的文本文件:
A
B
C
D
E
我正在寻找一种优雅的方式来构造这样的“滞后”元组:
(A, B), (B, C), (C, D), (D, E)
最简单的方法是使用tail
and zip
:
val xs = Seq('A', 'B', 'C', 'D', 'E')
xs zip xs.tail
如果效率是一个问题(即您不想通过调用创建额外的中间序列tail
并且Seq
您使用的不是List
s,这意味着tail
需要 O(n)),那么您可以使用视图:
xs zip xs.view.tail
我不太确定它有多优雅,但这至少适用于超过 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以获得在列表和元组之间转换的好方法。