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)