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