タプルで構成される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
使用するのがsではない場合List
、つまり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を参照することをお勧めします。