Colecciones Scala - Tuple

Scala tuple combina un número fijo de elementos juntos para que puedan pasarse como un todo. A diferencia de una matriz o lista, una tupla puede contener objetos con diferentes tipos, pero también son inmutables.

El siguiente es un ejemplo de una tupla que contiene un número entero, una cadena y la consola.

val t = (1, "hello", Console)

Que es azúcar sintáctico (atajo) para lo siguiente:

val t = new Tuple3(1, "hello", Console)

El tipo real de una tupla depende del número y de los elementos que contiene y de los tipos de esos elementos. Por tanto, el tipo de (99, "Luftballons") es Tuple2 [Int, String]. El tipo de ('u', 'r', "the", 1, 4, "me") es Tuple6 [Char, Char, String, Int, Int, String]

Las tuplas son de tipo Tuple1, Tuple2, Tuple3 y así sucesivamente. Actualmente hay un límite superior de 22 en Scala si necesita más, entonces puede usar una colección, no una tupla. Para cada tipo de TupleN, donde 1 <= N <= 22, Scala define varios métodos de acceso a elementos. Dada la siguiente definición:

val t = (4,3,2,1)

Para acceder a elementos de una tupla t, puede usar el método t._1 para acceder al primer elemento, t._2 para acceder al segundo, y así sucesivamente. Por ejemplo, la siguiente expresión calcula la suma de todos los elementos de t.

val sum = t._1 + t._2 + t._3 + t._4

Puede usar Tuple para escribir un método que toma List [Double] y devuelve el recuento, la suma y la suma de cuadrados devueltos en una Tuple de tres elementos, una Tuple3 [Int, Double, Double]. También son útiles para pasar una lista de valores de datos como mensajes entre actores en programación concurrente.

Pruebe el siguiente programa de ejemplo. Muestra cómo usar una tupla.

Ejemplo

object Demo {
   def main(args: Array[String]) {
      val t = (4,3,2,1)
      val sum = t._1 + t._2 + t._3 + t._4
      println( "Sum of elements: "  + sum )
   }
}

Guarde el programa anterior en Demo.scala. Los siguientes comandos se utilizan para compilar y ejecutar este programa.

Comandos

\>scalac Demo.scala
\>scala Demo

Salida

Sum of elements: 10

Iterar sobre la tupla

Puedes usar Tuple.productIterator() método para iterar sobre todos los elementos de una tupla.

Pruebe el siguiente programa de ejemplo para iterar sobre tuplas.

Ejemplo

object Demo {
   def main(args: Array[String]) {
      val t = (4,3,2,1)
      t.productIterator.foreach{ i =>println("Value = " + i )}
   }
}

Guarde el programa anterior en Demo.scala. Los siguientes comandos se utilizan para compilar y ejecutar este programa.

Comandos

\>scalac Demo.scala
\>scala Demo

Salida

Value = 4
Value = 3
Value = 2
Value = 1

Conversión a cadena

Puedes usar Tuple.toString()método para concatenar todos los elementos de la tupla en una cadena. Pruebe el siguiente programa de ejemplo para convertir a String.

Ejemplo

object Demo {
   def main(args: Array[String]) {
      val t = new Tuple3(1, "hello", Console)
      println("Concatenated String: " + t.toString() )
   }
}

Guarde el programa anterior en Demo.scala. Los siguientes comandos se utilizan para compilar y ejecutar este programa.

Mando

\>scalac Demo.scala
\>scala Demo

Salida

Concatenated String: (1,hello,[email protected])

Intercambia los elementos

Puedes usar Tuple.swap método para intercambiar los elementos de un Tuple2.

Pruebe el siguiente programa de ejemplo para intercambiar los elementos.

Ejemplo

object Demo {
   def main(args: Array[String]) {
      val t = new Tuple2("Scala", "hello")
      println("Swapped Tuple: " + t.swap )
   }
}

Guarde el programa anterior en Demo.scala. Los siguientes comandos se utilizan para compilar y ejecutar este programa.

Mando

\>scalac Demo.scala
\>scala Demo

Salida

Swapped tuple: (hello,Scala)