4

我想创建一个包含元组的 Scala 序列。输入是这样的文本文件:

A
B
C
D
E

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

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

2 回答 2

11

最简单的方法是使用tailand zip

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

如果效率是一个问题(即您不想通过调用创建额外的中间序列tail并且Seq您使用的不是Lists,这意味着tail需要 O(n)),那么您可以使用视图:

xs zip xs.view.tail
于 2013-03-12T13:01:27.060 回答
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以获得在列表和元组之间转换的好方法。

于 2013-03-12T13:01:19.040 回答