Colecciones Scala - Mapa

Scala map es una colección de pares clave / valor. Cualquier valor se puede recuperar en función de su clave. Las claves son únicas en el mapa, pero los valores no necesitan ser únicos. Los mapas también se denominan tablas hash. Hay dos tipos de mapas, elimmutable y el mutable. La diferencia entre objetos mutables e inmutables es que cuando un objeto es inmutable, el objeto en sí no se puede cambiar.

De forma predeterminada, Scala usa el mapa inmutable. Si desea utilizar el mapa mutable, tendrá que importarscala.collection.mutable.Mapclase explícitamente. Si desea utilizar mapas mutables e inmutables en el mismo, puede continuar refiriéndose al mapa inmutable comoMap pero puede referirse al conjunto mutable como mutable.Map.

A continuación se muestran las declaraciones de ejemplo para declarar mapas inmutables:

// 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")

Al definir un mapa vacío, la anotación de tipo es necesaria ya que el sistema necesita asignar un tipo concreto a la variable. Si queremos agregar un par clave-valor a un mapa, podemos usar el operador + de la siguiente manera.

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

Operaciones básicas en MAP

Todas las operaciones en mapas se pueden expresar en términos de los siguientes tres métodos.

No Señor Métodos y descripción
1

keys

Este método devuelve un iterable que contiene cada clave en el mapa.

2

values

Este método devuelve un iterable que contiene cada valor en el mapa.

3

isEmpty

Este método devuelve verdadero si el mapa está vacío; de lo contrario, es falso.

Pruebe el siguiente programa de ejemplo que muestra el uso de los métodos Map.

Ejemplo

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

Guarde el programa anterior en Demo.scala. Los siguientes comandos se utilizan para compilar y ejecutar este programa.

Mando

\>scalac Demo.scala
\>scala Demo

Salida

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

Concatenar mapas

Puedes usar cualquiera ++ operador o Map.++() para concatenar dos o más mapas, pero al agregar mapas eliminará las claves duplicadas.

Pruebe el siguiente programa de ejemplo para concatenar dos mapas.

Ejemplo

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

Guarde el programa anterior en Demo.scala. Los siguientes comandos se utilizan para compilar y ejecutar este programa.

Mando

\>scalac Demo.scala
\>scala Demo

Salida

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 claves y valores desde un mapa

Puede iterar a través de las claves y valores de un mapa utilizando el bucle "foreach". Aquí, usamos el métodoforeachasociado con el iterador para recorrer las claves. A continuación se muestra el programa de ejemplo.

Ejemplo

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

Guarde el programa anterior en Demo.scala. Los siguientes comandos se utilizan para compilar y ejecutar este programa.

Mando

\>scalac Demo.scala
\>scala Demo

Salida

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

Buscar una clave en el mapa

Puedes usar cualquiera Map.containsmétodo para probar si una clave determinada existe en el mapa o no. Pruebe el siguiente programa de ejemplo para la comprobación de claves.

Ejemplo

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

Guarde el programa anterior en Demo.scala. Los siguientes comandos se utilizan para compilar y ejecutar este programa.

Mando

\>scalac Demo.scala
\>scala Demo

Salida

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