fbl
fbl

Reputation: 2920

Is there a scala list operation that makes tuples from lists?

I'm trying to process triplets in a list. Imperatively, I could do this:

for(i = 1; i < list.length-1; i++)
{
   process( list[i-1], list[i], list[i+1] )
}

Is there a List function in Scala (or how would one write it) that can do something like this:

val data = [1,2,3,4,5,6,7,8,9,10]
val tuples = data.some_magic_func
tuples would be[(1,2,3), (2,3,4), (3,4,5), (4,5,6) ... ]

Thanks!

Upvotes: 6

Views: 4513

Answers (3)

Daniel C. Sobral
Daniel C. Sobral

Reputation: 297275

I know you got the answer you wanted, but the technically correct answer is no. There's no general method that takes a list and returns tuples of variable arity because there's no way to represent that type signature in Scala at the present.

Upvotes: 10

Pablo Fernandez
Pablo Fernandez

Reputation: 105258

val data = List(1,2,3,4,5,6,7,8,9,10)
val tuples = data.sliding(3).toList
// tuples would be List(List(1,2,3), List(2,3,4), List(3,4,5), List(4,5,6) ... )

Upvotes: 8

Landei
Landei

Reputation: 54584

Pablo's solution isn't entirely correct, you still need to transform the list of lists into a list of tuples:

val data = List(1,2,3,4,5,6,7,8,9,10)
val tuples = data.sliding(3).toList.collect{ case List(x,y,z) => (x,y,z) }
//--> tuples: List[(Int, Int, Int)] = List((1,2,3), (2,3,4), (3,4,5), ...

Upvotes: 23

Related Questions