una tuplas recorrer por metodos listas lista funciones diccionarios definir comprensión como anidadas scala tuples flatten

scala - tuplas - metodos de listas en python



¿Cómo aplanar una tupla anidada? (3)

No estoy seguro de la eficacia de esto, pero puede convertir Tuple a List con tuple.productIterator.toList , luego flatten las listas anidadas:

scala> val tuple = ("top", ("nested", 42.0)) tuple: (String, (String, Double)) = (top,(nested,42.0)) scala> tuple.productIterator.map({ | case (item: Product) => item.productIterator.toList | case (item: Any) => List(item) | }).toList.flatten res0: List[Any] = List(top, nested, 42.0)

Tengo una estructura de tupla anidada como (String,(String,Double)) y quiero transformarla en (String,String,Double) . Tengo varios tipos de tuplas anidadas y no quiero transformar cada una manualmente. ¿Hay alguna manera conveniente de hacer eso?


No hay aplanado en un Tupple. Pero si conoces la estructura, puedes hacer algo como esto:

implicit def flatten1[A, B, C](t: ((A, B), C)): (A, B, C) = (t._1._1, t._1._2, t._2) implicit def flatten2[A, B, C](t: (A, (B, C))): (A, B, C) = (t._1, t._2._1, t._2._2)

Esto aplanará a Tupple con cualquier tipo. También puede agregar la palabra clave implícita a la definición. Esto funciona solo para tres elementos. Puedes aplanar a Tupple como:

(1, ("hello", 42.0)) => (1, "hello", 42.0) (("test", 3.7f), "hi") => ("test", 3.7f, "hi")

Múltiples Tupple anidados no se pueden aplanar en el suelo, porque solo hay tres elementos en el tipo de retorno:

((1, (2, 3)),4) => (1, (2, 3), 4)