문제

I want to create a Scala sequence comprising tuples. The input is a text file like this:

A
B
C
D
E

I'm looking for an elegant way to construct "lagged" tuples like this:

(A, B), (B, C), (C, D), (D, E)
도움이 되었습니까?

해결책

The easiest way to do this is by using the tail and zip:

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

If efficiency is a concern (i.e. you don't want to create an extra intermediate sequence by calling tail and the Seq you use are not Lists, meaning that tail takes O(n)) then you can use views:

xs zip xs.view.tail

다른 팁

I'm not quite sure how elegant it is, but this will work for at least all lists of more than 1 element:

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))

If you want something more elegant than that, I'd advise you look at Shapeless for nice ways to convert between lists and tuples.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top