Echo Echo - 2 months ago 5
Scala Question

Iterate Over a tuple

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

Answer

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.

Comments