Domanda

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)
È stato utile?

Soluzione

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

Altri suggerimenti

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top