Cuando trabajamos con mapas en Scala, es fundamental entender cómo realizar operaciones básicas como agregar, eliminar y concatenar elementos, tanto en mapas inmutables como mutables. Empecemos por los mapas inmutables, que son los que se usan por defecto en Scala.
Para agregar elementos a un mapa inmutable, podemos utilizar la operación suma, que en Scala se representa con el símbolo +. Aunque internamente es un método llamado +, podemos usarlo de forma natural con el operador +. Por ejemplo, si tenemos un mapa con dos elementos y queremos añadir un nuevo par clave-valor, simplemente sumamos ese par al mapa original. Esto no modifica el mapa original, sino que devuelve un nuevo mapa con los elementos anteriores más el nuevo.
val mapa = Map(1 -> "Ana", 2 -> "Luis")
val mapaActualizado = mapa + (3 -> "Luis")
Aquí, mapa sigue igual, y mapaActualizado contiene los tres elementos. Podemos agregar tantos pares como queramos usando esta operación.
Para eliminar elementos, usamos el operador -, que recibe la clave que queremos eliminar. Al igual que con la suma, esta operación devuelve un nuevo mapa sin la clave indicada, sin modificar el original.
val mapaSinLuis = mapaActualizado - 3
En este caso, mapaSinLuis no tendrá la clave 3 ni su valor asociado.
Cuando queremos combinar dos mapas, podemos usar la operación ++, que concatena dos mapas. Si ambos mapas tienen claves repetidas, el valor que prevalece es el del mapa que se pasa a la derecha en la operación. Esto es importante porque las claves en un mapa deben ser únicas.
val mapa1 = Map(1 -> "BMW", 2 -> "Mercedes", 3 -> "Renault")
val mapa2 = Map(3 -> "Toyota", 4 -> "Mini")
val mapaConcatenado = mapa1 ++ mapa2
En este ejemplo, la clave 3 aparece en ambos mapas, pero en mapaConcatenado el valor asociado a la clave 3 será "Toyota", que viene del segundo mapa.
Por otro lado, Scala también ofrece mapas mutables, que permiten modificar su contenido directamente. Para usarlos, primero importamos el paquete correspondiente:
import scala.collection.mutable
Luego, podemos crear un mapa mutable y agregar elementos usando el operador +=, que modifica el mapa en el lugar.
val mapaMutable = mutable.Map(1 -> "Renault", 2 -> "BMW")
mapaMutable += (3 -> "Opel")
mapaMutable += (4 -> "Toyota")
Aquí, mapaMutable se actualiza con los nuevos pares clave-valor sin necesidad de crear una copia.
Otra forma de insertar o modificar elementos en un mapa mutable es usando el método put:
mapaMutable.put(3, "Toyota")
También podemos asignar directamente un valor a una clave usando la sintaxis de paréntesis:
mapaMutable(3) = "Toyota"
Esta última forma no devuelve nada, simplemente modifica el mapa.
Para concatenar mapas mutables, podemos usar el operador ++=, que añade todos los elementos de otro mapa al mapa mutable original, modificándolo en el lugar.
Eliminar elementos en mapas mutables también es sencillo con el operador -=:
mapaMutable -= 2
Esto elimina la clave 2 y su valor asociado del mapa mutable.
Además, los mapas mutables ofrecen métodos como retain para filtrar elementos según una condición, y clear para vaciar completamente el mapa.
En resumen, las operaciones con mapas en Scala son muy similares a las que conocemos de conjuntos y listas, con la diferencia clave de que los mapas manejan pares clave-valor y las claves deben ser únicas. La elección entre mapas mutables e inmutables dependerá de si queremos modificar el mapa original o trabajar con copias nuevas tras cada operación.