Coleções de Scala - Conjunto
Scala Set é uma coleção de elementos diferentes em pares do mesmo tipo. Em outras palavras, um Conjunto é uma coleção que não contém elementos duplicados. Existem dois tipos de conjuntos, oimmutable e a mutable. A diferença entre objetos mutáveis e imutáveis é que quando um objeto é imutável, o próprio objeto não pode ser alterado.
Por padrão, Scala usa o Conjunto imutável. Se você quiser usar o conjunto mutável, você terá que importarscala.collection.mutable.Setclasse explicitamente. Se você deseja usar conjuntos mutáveis e imutáveis na mesma coleção, você pode continuar a referir-se ao conjunto imutável comoSet mas você pode se referir ao conjunto mutável como mutable.Set.
Aqui está como você pode declarar conjuntos imutáveis -
Sintaxe
// Empty set of integer type
var s : Set[Int] = Set()
// Set of integer type
var s : Set[Int] = Set(1,3,5,7)
or
var s = Set(1,3,5,7)
Ao definir um conjunto vazio, a anotação de tipo é necessária, pois o sistema precisa atribuir um tipo concreto à variável.
Operações básicas no set
Todas as operações em conjuntos podem ser expressas em termos dos seguintes três métodos -
Sr. Não | Métodos e Descrição |
---|---|
1 | head Este método retorna o primeiro elemento de um conjunto. |
2 | tail Este método retorna um conjunto que consiste em todos os elementos, exceto o primeiro. |
3 | isEmpty Este método retorna verdadeiro se o conjunto estiver vazio, caso contrário, é falso. |
Experimente o exemplo a seguir, mostrando o uso dos métodos operacionais básicos -
Exemplo
object Demo {
def main(args: Array[String]) {
val fruit = Set("apples", "oranges", "pears")
val nums: Set[Int] = Set()
println( "Head of fruit : " + fruit.head )
println( "Tail of fruit : " + fruit.tail )
println( "Check if fruit is empty : " + fruit.isEmpty )
println( "Check if nums is empty : " + nums.isEmpty )
}
}
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
Head of fruit : apples
Tail of fruit : Set(oranges, pears)
Check if fruit is empty : false
Check if nums is empty : true
Conjuntos de concatenação
Você pode usar qualquer ++ operador ou Set.++() método para concatenar dois ou mais conjuntos, mas ao adicionar conjuntos removerá elementos duplicados.
A seguir está o exemplo para concatenar dois conjuntos.
Exemplo
object Demo {
def main(args: Array[String]) {
val fruit1 = Set("apples", "oranges", "pears")
val fruit2 = Set("mangoes", "banana")
// use two or more sets with ++ as operator
var fruit = fruit1 ++ fruit2
println( "fruit1 ++ fruit2 : " + fruit )
// use two sets with ++ as method
fruit = fruit1.++(fruit2)
println( "fruit1.++(fruit2) : " + fruit )
}
}
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
fruit1 ++ fruit2 : Set(banana, apples, mangoes, pears, oranges)
fruit1.++(fruit2) : Set(banana, apples, mangoes, pears, oranges)
Encontre o máximo e o mínimo de elementos em um conjunto
Você pode usar Set.min método para descobrir o mínimo e Set.maxmétodo para descobrir o máximo de elementos disponíveis em um conjunto. A seguir está o exemplo para mostrar o programa.
Exemplo
object Demo {
def main(args: Array[String]) {
val num = Set(5,6,9,20,30,45)
// find min and max of the elements
println( "Min element in Set(5,6,9,20,30,45) : " + num.min )
println( "Max element in Set(5,6,9,20,30,45) : " + num.max )
}
}
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
Min element in Set(5,6,9,20,30,45) : 5
Max element in Set(5,6,9,20,30,45) : 45
Encontre inserções de valores comuns
Você pode usar qualquer Set.& método ou Set.intersectmétodo para descobrir os valores comuns entre dois conjuntos. Experimente o seguinte exemplo para mostrar o uso.
Exemplo
object Demo {
def main(args: Array[String]) {
val num1 = Set(5,6,9,20,30,45)
val num2 = Set(50,60,9,20,35,55)
// find common elements between two sets
println( "num1.&(num2) : " + num1.&(num2) )
println( "num1.intersect(num2) : " + num1.intersect(num2) )
}
}
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
num1.&(num2) : Set(20, 9)
num1.intersect(num2) : Set(20, 9)