Coleções de Scala - Tupla

A tupla do Scala combina um número fixo de itens juntos para que eles possam ser passados ​​como um todo. Ao contrário de uma matriz ou lista, uma tupla pode conter objetos com diferentes tipos, mas eles também são imutáveis.

A seguir está um exemplo de uma tupla contendo um inteiro, uma string e o console.

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

Qual é o açúcar sintático (atalho) para o seguinte -

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

O tipo real de uma tupla depende do número e dos elementos que ela contém e dos tipos desses elementos. Assim, o tipo de (99, "Luftballons") é Tuple2 [Int, String]. O tipo de ('u', 'r', "o", 1, 4, "me") é Tupla6 [Car, Car, String, Int, Int, String]

As tuplas são do tipo Tupla1, Tupla2, Tupla3 e assim por diante. Atualmente, há um limite máximo de 22 no Scala. Se você precisar de mais, poderá usar uma coleção, não uma tupla. Para cada tipo TupleN, onde 1 <= N <= 22, Scala define vários métodos de acesso a elementos. Dada a seguinte definição -

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

Para acessar os elementos de uma tupla t, você pode usar o método t._1 para acessar o primeiro elemento, t._2 para acessar o segundo e assim por diante. Por exemplo, a seguinte expressão calcula a soma de todos os elementos de t.

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

Você pode usar Tupla para escrever um método que pega uma Lista [Duplo] e retorna a contagem, a soma e a soma dos quadrados retornados em uma Tupla de três elementos, uma Tupla3 [Int, Duplo, Duplo]. Eles também são úteis para passar uma lista de valores de dados como mensagens entre atores na programação simultânea.

Experimente o seguinte programa de exemplo. Mostra como usar uma tupla.

Exemplo

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

Salve o programa acima em Demo.scala. Os seguintes comandos são usados ​​para compilar e executar este programa.

Comandos

\>scalac Demo.scala
\>scala Demo

Resultado

Sum of elements: 10

Iterar sobre a tupla

Você pode usar Tuple.productIterator() método para iterar sobre todos os elementos de uma tupla.

Experimente o programa de exemplo a seguir para iterar nas tuplas.

Exemplo

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

Salve o programa acima em Demo.scala. Os seguintes comandos são usados ​​para compilar e executar este programa.

Comandos

\>scalac Demo.scala
\>scala Demo

Resultado

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

Convertendo em String

Você pode usar Tuple.toString()método para concatenar todos os elementos da tupla em uma string. Experimente o programa de exemplo a seguir para converter em String.

Exemplo

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

Salve o programa acima em Demo.scala. Os seguintes comandos são usados ​​para compilar e executar este programa.

Comando

\>scalac Demo.scala
\>scala Demo

Resultado

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

Troque os elementos

Você pode usar Tuple.swap método para trocar os elementos de um Tuple2.

Experimente o programa de exemplo a seguir para trocar os elementos.

Exemplo

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

Salve o programa acima em Demo.scala. Os seguintes comandos são usados ​​para compilar e executar este programa.

Comando

\>scalac Demo.scala
\>scala Demo

Resultado

Swapped tuple: (hello,Scala)