Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Iterate Over a tuple

Tags:

iterator

scala

I need to implement a generic method that takes a tuple and returns a Map Example :

val tuple=((1,2),(("A","B"),("C",3)),4)

I have been trying to break this tuple into a list :

val list=tuple.productIterator.toList
Scala>list: List[Any] = List((1,2), ((A,B),(C,3)), 4)

But this way returns List[Any] .

I am trying now to find out how to iterate over the following tuple ,for example :

((1,2),(("A","B"),("C",3)),4)

in order to loop over each element 1,2,"A",B",...etc. How could I do this kind of iteration over the tuple

like image 526
Echo Avatar asked Mar 13 '11 12:03

Echo


2 Answers

What about? :

def flatProduct(t: Product): Iterator[Any] = t.productIterator.flatMap {
  case p: Product => flatProduct(p)
  case x => Iterator(x)
}
val tuple = ((1,2),(("A","B"),("C",3)),4)
flatProduct(tuple).mkString(",") // 1,2,A,B,C,3,4

Ok, the Any-problem remains. At least that´s due to the return type of productIterator.

like image 170
Peter Schmitz Avatar answered Sep 21 '22 19:09

Peter Schmitz


Instead of tuples, use Shapeless data structures like HList. You can have generic processing, and also don't lose type information.

The only problem is that documentation isn't very comprehensive.

like image 45
david.perez Avatar answered Sep 21 '22 19:09

david.perez