¿Hay alguna manera de manipular múltiples valores de una tupla sin usar una variable temporal y comenzar una nueva instrucción?Manipulando tuplas
Digamos que tengo un método que devuelve una tupla y quiero hacer algo con esos valores en línea.
p. Ej. si quiero dividir una cadena en un punto determinado y revertir las piezas
def backToFront(s: String, n:Int) = s.splitAt(n)...
que puedo hacer
val (a, b) = s.splitAt(n)
b + a
(requiere variables temporales y nueva declaración) o
List(s.splitAt(n)).map(i => i._2 + i._1).head
(obras , pero parece un poco sucio, creando un solo elemento Lista solo para esto) o
s.splitAt(n).swap.productIterator.mkString
(funciona para este ejemplo en particular, pero solo porque existe un método swap
que hace lo que quiero, por lo que no es muy general).
El método zipped
en tuplas parece ser solo para tuplas de listas.
Como otro ejemplo, ¿cómo podría convertir la tupla ('a, 'b, 'c)
en ('b, 'a, 'c)
en una sola declaración?
¡La coincidencia de patrones es buena! 's.splitAt (n) match {case (a, b) => b + a}' funciona para la primera parte –
Es una pena que no haya un método 'fold' en la biblioteca estándar; entonces podría simplemente 's.splitAt (n) .fold ((a, b) => b + a)', y sería más eficiente también. (Sí, por supuesto que he hecho el mío.) –
Fold es un buen nombre para ello. Actualicé mi respuesta. –