Collezioni Scala - Tuple

La tupla Scala combina un numero fisso di elementi insieme in modo che possano essere trasferiti nel loro insieme. A differenza di un array o di un elenco, una tupla può contenere oggetti con tipi diversi ma sono anche immutabili.

Il seguente è un esempio di una tupla che contiene un numero intero, una stringa e la console.

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

Che è zucchero sintattico (scorciatoia) per quanto segue -

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

Il tipo effettivo di una tupla dipende dal numero e dagli elementi che contiene e dai tipi di tali elementi. Pertanto, il tipo di (99, "Luftballons") è Tuple2 [Int, String]. Il tipo di ('u', 'r', "the", 1, 4, "me") è Tuple6 [Char, Char, String, Int, Int, String]

Le tuple sono di tipo Tuple1, Tuple2, Tuple3 e così via. Attualmente c'è un limite massimo di 22 in Scala se ne hai bisogno di più, puoi usare una raccolta, non una tupla. Per ogni tipo di TupleN, dove 1 <= N <= 22, Scala definisce un numero di metodi di accesso agli elementi. Data la seguente definizione:

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

Per accedere agli elementi di una tupla t, è possibile utilizzare il metodo t._1 per accedere al primo elemento, t._2 per accedere al secondo e così via. Ad esempio, la seguente espressione calcola la somma di tutti gli elementi di t.

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

È possibile utilizzare Tuple per scrivere un metodo che accetta List [Double] e restituisce il conteggio, la somma e la somma dei quadrati restituiti in una Tuple a tre elementi, una Tuple3 [Int, Double, Double]. Sono anche utili per passare un elenco di valori di dati come messaggi tra attori nella programmazione concorrente.

Prova il seguente programma di esempio. Mostra come usare una tupla.

Esempio

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

Salva il programma sopra in formato Demo.scala. I seguenti comandi vengono utilizzati per compilare ed eseguire questo programma.

Comandi

\>scalac Demo.scala
\>scala Demo

Produzione

Sum of elements: 10

Ripeti la tupla

Puoi usare Tuple.productIterator() metodo per iterare su tutti gli elementi di una tupla.

Prova il seguente programma di esempio per eseguire l'iterazione su tuple.

Esempio

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

Salva il programma sopra in formato Demo.scala. I seguenti comandi vengono utilizzati per compilare ed eseguire questo programma.

Comandi

\>scalac Demo.scala
\>scala Demo

Produzione

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

Conversione in stringa

Puoi usare Tuple.toString()metodo per concatenare tutti gli elementi della tupla in una stringa. Prova il seguente programma di esempio per convertire in String.

Esempio

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

Salva il programma sopra in formato Demo.scala. I seguenti comandi vengono utilizzati per compilare ed eseguire questo programma.

Comando

\>scalac Demo.scala
\>scala Demo

Produzione

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

Scambia gli elementi

Puoi usare Tuple.swap metodo per scambiare gli elementi di un Tuple2.

Prova il seguente programma di esempio per scambiare gli elementi.

Esempio

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

Salva il programma sopra in formato Demo.scala. I seguenti comandi vengono utilizzati per compilare ed eseguire questo programma.

Comando

\>scalac Demo.scala
\>scala Demo

Produzione

Swapped tuple: (hello,Scala)