Collections Scala - Tuple

Scala tuple combine un nombre fixe d'éléments afin qu'ils puissent être transmis dans leur ensemble. Contrairement à un tableau ou une liste, un tuple peut contenir des objets de types différents, mais ils sont également immuables.

Voici un exemple de tuple contenant un entier, une chaîne et la console.

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

Quel est le sucre syntaxique (raccourci) pour ce qui suit -

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

Le type réel d'un tuple dépend du nombre et des éléments qu'il contient et des types de ces éléments. Ainsi, le type de (99, "Luftballons") est Tuple2 [Int, String]. Le type de ('u', 'r', "the", 1, 4, "me") est Tuple6 [Char, Char, String, Int, Int, String]

Les tuples sont de type Tuple1, Tuple2, Tuple3 et ainsi de suite. Il existe actuellement une limite supérieure de 22 dans la Scala si vous avez besoin de plus, vous pouvez alors utiliser une collection, pas un tuple. Pour chaque type TupleN, où 1 <= N <= 22, Scala définit un certain nombre de méthodes d'accès aux éléments. Compte tenu de la définition suivante -

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

Pour accéder aux éléments d'un tuple t, vous pouvez utiliser la méthode t._1 pour accéder au premier élément, t._2 pour accéder au second, et ainsi de suite. Par exemple, l'expression suivante calcule la somme de tous les éléments de t.

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

Vous pouvez utiliser Tuple pour écrire une méthode qui prend un List [Double] et renvoie le nombre, la somme et la somme des carrés renvoyés dans un Tuple à trois éléments, un Tuple3 [Int, Double, Double]. Ils sont également utiles pour transmettre une liste de valeurs de données sous forme de messages entre acteurs dans la programmation simultanée.

Essayez l'exemple de programme suivant. Il montre comment utiliser un tuple.

Exemple

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 )
   }
}

Enregistrez le programme ci-dessus dans Demo.scala. Les commandes suivantes sont utilisées pour compiler et exécuter ce programme.

Commandes

\>scalac Demo.scala
\>scala Demo

Production

Sum of elements: 10

Itérer sur le tuple

Vous pouvez utiliser Tuple.productIterator() pour itérer sur tous les éléments d'un Tuple.

Essayez l'exemple de programme suivant pour parcourir les tuples.

Exemple

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

Enregistrez le programme ci-dessus dans Demo.scala. Les commandes suivantes sont utilisées pour compiler et exécuter ce programme.

Commandes

\>scalac Demo.scala
\>scala Demo

Production

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

Conversion en chaîne

Vous pouvez utiliser Tuple.toString()méthode pour concaténer tous les éléments du tuple dans une chaîne. Essayez l'exemple de programme suivant pour convertir en String.

Exemple

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

Enregistrez le programme ci-dessus dans Demo.scala. Les commandes suivantes sont utilisées pour compiler et exécuter ce programme.

Commander

\>scalac Demo.scala
\>scala Demo

Production

Concatenated String: (1,hello,scala.Console$@281acd47)

Échangez les éléments

Vous pouvez utiliser Tuple.swap pour échanger les éléments d'un Tuple2.

Essayez l'exemple de programme suivant pour échanger les éléments.

Exemple

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

Enregistrez le programme ci-dessus dans Demo.scala. Les commandes suivantes sont utilisées pour compiler et exécuter ce programme.

Commander

\>scalac Demo.scala
\>scala Demo

Production

Swapped tuple: (hello,Scala)