Sobes.tech
Junior

¿Cómo funciona el tipo de dato Map en Go?

sobes.tech AI

Respuesta de la IA

Map — es una colección no ordenada de pares de "clave-valor" en Go.

Características:

  • Las claves deben ser tipos de datos comparables (números, cadenas, booleanos, punteros, canales, interfaces, si el tipo dinámico es comparable, y arreglos si sus elementos son comparables). No se pueden usar slices, funciones u otros maps como claves.
  • Los valores pueden ser de cualquier tipo de dato.
  • Map es un tipo de referencia, lo que significa que una variable de tipo map contiene un puntero a la estructura de datos map en memoria. La modificación del map a través de una variable será visible a través de otras variables que referencian al mismo map.
  • El valor nulo para un map es nil. No se puede escribir en un map nil; intentar hacerlo provocará un pánico.
  • El tamaño del map cambia dinámicamente a medida que se añaden o eliminan elementos.

Implementación interna: Map en Go se implementa como una tabla hash (hash table). Cada clave se somete a hash, y el resultado del hash se usa para determinar la posición del valor asociado en la tabla.

// Crear un map
m := make(map[string]int)

// Añadir elementos
m["uno"] = 1
m["dos"] = 2

// Obtener un valor
value, ok := m["uno"] // value = 1, ok = true
value, ok = m["tres"]  // value = 0 (valor cero para int), ok = false

// Eliminar un elemento
delete(m, "dos")

// Iterar sobre el map (el orden no está garantizado)
for key, value := range m {
	// ...
}

Comparación de maps: Dos maps se consideran iguales solo si hacen referencia a la misma estructura interna, es decir, map1 == map2 solo si map1 y map2 son la misma variable. No se puede comparar el contenido de un map usando ==. Para comparar el contenido, hay que iterar sobre ambos maps y comparar sus elementos.

Rendimiento: Las operaciones de acceso, adición y eliminación en un map tienen en promedio una complejidad O(1). En el peor caso (por ejemplo, con muchas colisiones en las funciones hash), pueden tomar O(n) en tiempo.