Coleções Scala - Mapa

O mapa Scala é uma coleção de pares de chave / valor. Qualquer valor pode ser recuperado com base em sua chave. As chaves são exclusivas no mapa, mas os valores não precisam ser exclusivos. Os mapas também são chamados de tabelas Hash. Existem dois tipos de mapas, 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 mapa imutável. Se você quiser usar o mapa mutável, você terá que importarscala.collection.mutable.Mapclasse explicitamente. Se você deseja usar mapas mutáveis ​​e imutáveis ​​no mesmo, então você pode continuar a se referir ao mapa imutável comoMap mas você pode se referir ao conjunto mutável como mutable.Map.

A seguir estão as instruções de exemplo para declarar mapas imutáveis ​​-

// Empty hash table whose keys are strings and values are integers:
var A:Map[Char,Int] = Map()

// A map with keys and values.
val colors = Map("red" -> "#FF0000", "azure" -> "#F0FFFF")

Ao definir o mapa vazio, a anotação de tipo é necessária, pois o sistema precisa atribuir um tipo concreto à variável. Se quisermos adicionar um par de valores-chave a um Mapa, podemos usar o operador + como segue.

A + = ('I' -> 1)
A + = ('J' -> 5)
A + = ('K' -> 10)
A + = ('L' -> 100)

Operações básicas no MAP

Todas as operações em mapas podem ser expressas em termos dos três métodos a seguir.

Sr. Não Métodos e Descrição
1

keys

Este método retorna um iterável contendo cada chave no mapa.

2

values

Este método retorna um iterável contendo cada valor no mapa.

3

isEmpty

Este método retorna verdadeiro se o mapa estiver vazio, caso contrário, é falso.

Experimente o programa de exemplo a seguir, mostrando o uso dos métodos Map.

Exemplo

object Demo {
   def main(args: Array[String]) {
      val colors = Map(
         "red" -> "#FF0000", "azure" -> "#F0FFFF", "peru" -> "#CD853F"
      )
      val nums: Map[Int, Int] = Map()
      println( "Keys in colors : " + colors.keys )
      println( "Values in colors : " + colors.values )
      println( "Check if colors is empty : " + colors.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

Keys in colors : Set(red, azure, peru)
Values in colors : MapLike(#FF0000, #F0FFFF, #CD853F)
Check if colors is empty : false
Check if nums is empty : true

Mapas de Concatenação

Você pode usar qualquer ++ operador ou Map.++() método para concatenar dois ou mais mapas, mas ao adicionar mapas removerá chaves duplicadas.

Experimente o programa de exemplo a seguir para concatenar dois mapas.

Exemplo

object Demo {
   def main(args: Array[String]) {
      val colors1 = Map(
         "red" -> "#FF0000", "azure" -> "#F0FFFF", "peru" -> "#CD853F"
      )
      val colors2 = Map(
         "blue" -> "#0033FF", "yellow" -> "#FFFF00", "red" -> "#FF0000"
      )
      // use two or more Maps with ++ as operator
      var colors = colors1 ++ colors2
      println( "colors1 ++ colors2 : " + colors )
      // use two maps with ++ as method
      colors = colors1.++(colors2)
      println( "colors1.++(colors2)) : " + colors )
   }
}

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

colors1 ++ colors2 : Map(blue -> #0033FF, azure -> #F0FFFF, 
   peru -> #CD853F, yellow -> #FFFF00, red -> #FF0000)

colors1.++(colors2)) : Map(blue -> #0033FF, azure -> #F0FFFF, 
   peru -> #CD853F, yellow -> #FFFF00, red -> #FF0000)

Imprimir chaves e valores de um mapa

Você pode iterar pelas chaves e valores de um mapa usando o loop "foreach". Aqui, usamos o métodoforeachassociado ao iterador para percorrer as chaves. A seguir está o programa de exemplo.

Exemplo

object Demo {
   def main(args: Array[String]) {
      val colors = Map("red" -> "#FF0000", "azure" -> "#F0FFFF","peru" -> "#CD853F")

      colors.keys.foreach{
         i =>  
         print( "Key = " + i )
         println(" Value = " + colors(i) )
      }
   }
}

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

Key = red Value = #FF0000
Key = azure Value = #F0FFFF
Key = peru Value = #CD853F

Verifique se há uma chave no mapa

Você pode usar qualquer Map.containsmétodo para testar se uma determinada chave existe ou não no mapa. Experimente o programa de exemplo a seguir para verificação de chave.

Exemplo

object Demo {
   def main(args: Array[String]) {
      val colors = Map(
         "red" -> "#FF0000", "azure" -> "#F0FFFF", "peru" -> "#CD853F"
      )
      if( colors.contains( "red" )) {
         println("Red key exists with value :"  + colors("red"))
      } else {
         println("Red key does not exist")
      }
      if( colors.contains( "maroon" )) {
         println("Maroon key exists with value :"  + colors("maroon"))
      } else {
         println("Maroon key does not exist")
      }
   }
}

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

Red key exists with value :#FF0000
Maroon key does not exist