Mapas (parte 1 de 2): Creando mapas

Con la operación Map uno puede crear mapas, en los cuales se asocian claves K con valores V. No puedes repetir dos veces una misma clave K para un mapa pero sí puede haber dos claves K1, K2 que apunten al mismo V.

Este curso ha sido marcado como anticuado y no está siendo revisado de forma activa. Es posible que la información pueda estar desactualizada o que los enlaces se hayan roto.

Los mapas en Scala son una estructura fundamental para asociar claves únicas con valores, muy parecida a lo que conocemos como diccionarios en Python o HashMaps en Java. La idea principal es que cada clave, que puede ser de cualquier tipo, se relaciona con un valor, también de cualquier tipo, formando pares que nos permiten acceder a la información de manera eficiente.

Podemos crear mapas que conecten, por ejemplo, números con nombres de alumnos, o strings con objetos complejos que representen entidades de nuestro sistema. Lo importante es que las claves sean únicas, ya que no tiene sentido que una misma clave apunte a dos valores diferentes. Si intentamos asignar dos valores a la misma clave, Scala mantendrá el último valor asignado, sobrescribiendo el anterior.

En Scala existen mapas mutables e inmutables, pero en esta ocasión nos centramos en los mapas inmutables, que una vez creados no pueden modificarse. Para crear un mapa inmutable, simplemente definimos un objeto con la función Map y le pasamos los pares clave-valor que queramos asociar. Por ejemplo, podemos crear un mapa que asocie números con nombres de alumnos así:

val alumnos = Map(
  1 -> "Pepito",
  2 -> "Elena",
  3 -> "Luis",
  4 -> "Miguel",
  5 -> "Laura"
)

Este mapa es inmutable, por lo que no podremos cambiar sus elementos después de crearlo. Sin embargo, podemos realizar operaciones para consultar sus claves y valores. Por ejemplo, con alumnos.keys obtenemos todas las claves, y con alumnos.values todos los valores.

Para acceder a un valor a partir de su clave, podemos usar la función get, que nos devuelve un tipo Option. Esto significa que el resultado puede contener un valor (Some(valor)) o no contener nada (None), evitando así el uso de null y los problemas asociados. Por ejemplo:

val alumnoDos = alumnos.get(2) // Esto devuelve Some("Elena")
val alumnoNueve = alumnos.get(9) // Esto devuelve None, porque no existe la clave 9

Para manejar estos casos, podemos verificar si la opción contiene un valor o no, o usar métodos como getOrElse para proporcionar un valor por defecto en caso de que la clave no exista:

val alumnoNueveConDefault = alumnos.getOrElse(9, "No existe")

Otra forma de acceder a los valores es usando la sintaxis de paréntesis, como alumnos(2), que nos devuelve directamente el valor asociado a la clave 2. Sin embargo, si la clave no existe, esta forma lanzará una excepción, por lo que es menos segura que usar get o getOrElse.

También podemos comprobar si una clave existe en el mapa con la función contains:

if (alumnos.contains(9)) {
  println(alumnos(9))
} else {
  println("El alumno no existe")
}

En resumen, los mapas en Scala nos ofrecen una forma poderosa y segura de asociar claves con valores, con mecanismos para evitar errores comunes como el acceso a claves inexistentes mediante el uso de Option y valores por defecto. Esto nos permite escribir código más robusto y claro cuando trabajamos con colecciones asociativas.

Lista de reproducción
  1. 1
    Introducción a Scala
    6 minutos
  2. 2
    Instalar Scala
    6 minutos
  3. 3
    Primeros pasos con el intérprete
    5 minutos
  4. 4
    Variables con val y var
    7 minutos
  5. 5
    Declarando funciones
    7 minutos
  6. 6
    Inciso sobre Units e iguales
    5 minutos
  7. 7
    Presentación de los objetos singleton
    6 minutos
  8. 8
    Editando y compilando archivos
    8 minutos
  9. 9
    Descargar e instalar Scala IDE
    6 minutos
  10. 10
    Proyectos y worksheets en Scala IDE
    7 minutos
  11. 11
    El condicional IF en Scala
    8 minutos
  12. 12
    Un caso sencillo de MATCH
    6 minutos
  13. 13
    Bucles WHILE y DO-WHILE (y String Interpolation)
    7 minutos
  14. 14
    El sistema de tipos
    7 minutos
  15. 15
    Colecciones
    9 minutos
  16. 16
    Funciones básicas de una colección
    8 minutos
  17. 17
    El map (es sensacional)
    8 minutos
  18. 18
    Flatten y flatMap
    9 minutos
  19. 19
    Sets, parte 1 de 3: Set
    8 minutos
  20. 20
    Sets, parte 2 de 3: Sets mutables
    4 minutos
  21. 21
    Sets, parte 3 de 3: SortedSet
    6 minutos
  22. 22
    Mapas (parte 1 de 2): Creando mapas
    9 minutos
  23. 23
    Mapas (parte 2 de 2): Operaciones
    8 minutos
  24. 24
    foreach y for
    8 minutos