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

効率が懸念される場合(つまり、呼び出しによって余分な中間シーケンスを作成したくなくtailSeq使用するのがsではない場合List、つまりtailO(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 に答える