0Pricing
Go Academy · Lección

Mapas como conjuntos

Use mapas para valores únicos

Mapas como conjuntos es una lección gratuita de Go Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Go Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Go Academy incluye 4 lecciones en total.

Go no tiene un tipo set

Go no tiene un tipo set integrado. La forma idiomática de representar un conjunto de valores únicos es usar un mapa cuyas claves sean los elementos del conjunto.

Mapa de booleanos

Un enfoque consiste en usar map[string]bool. La presencia de una clave (y que su valor sea true) indica que el elemento pertenece al conjunto.

package main

import "fmt"

func main() {
	set := map[string]bool{}
	set["apple"] = true
	set["banana"] = true
	fmt.Println(set)
}

Comprobación de pertenencia

Use comma-ok o lea directamente el booleano para comprobar la pertenencia.

package main

import "fmt"

func main() {
	set := map[string]bool{"apple": true}
	fmt.Println(set["apple"])
	fmt.Println(set["cherry"])
}

Mapa de estructuras vacías

Un conjunto más eficiente en cuanto a memoria usa map[string]struct{}. Una estructura vacía ocupa cero bytes, por lo que solo almacena las claves.

package main

import "fmt"

func main() {
	set := map[string]struct{}{}
	set["x"] = struct{}{}
	_, ok := set["x"]
	fmt.Println("x in set:", ok)
}

Por qué usar una estructura vacía

En un conjunto, el valor nunca importa; solo importa la clave. struct{}{} indica que pretende ignorar los valores y no usa memoria adicional por entrada.

Adición de elementos

Añadir una clave duplicada no tiene ningún efecto, por lo que el conjunto garantiza la unicidad de forma natural.

package main

import "fmt"

func main() {
	set := map[string]struct{}{}
	set["a"] = struct{}{}
	set["a"] = struct{}{}
	fmt.Println("size:", len(set))
}

Eliminación de duplicados

Un uso clásico consiste en eliminar duplicados de un slice. Añada cada elemento a un conjunto y después lea las claves únicas.

package main

import "fmt"

func main() {
	input := []string{"a", "b", "a", "c", "b"}
	set := map[string]struct{}{}
	for _, v := range input {
		set[v] = struct{}{}
	}
	fmt.Println("unique count:", len(set))
}

Creación de un slice único

Combine el conjunto con un slice de resultados para conservar el orden de la primera aparición y eliminar los duplicados.

package main

import "fmt"

func main() {
	input := []int{1, 2, 1, 3, 2}
	seen := map[int]struct{}{}
	result := []int{}
	for _, v := range input {
		if _, ok := seen[v]; !ok {
			seen[v] = struct{}{}
			result = append(result, v)
		}
	}
	fmt.Println(result)
}

Intersección de conjuntos

Para encontrar los elementos comunes a dos conjuntos, recorra uno de ellos y conserve los que estén presentes en el otro.

package main

import "fmt"

func main() {
	a := map[int]struct{}{1: {}, 2: {}, 3: {}}
	b := map[int]struct{}{2: {}, 3: {}, 4: {}}
	for k := range a {
		if _, ok := b[k]; ok {
			fmt.Println("common:", k)
		}
	}
}

Eliminación de un conjunto

Use delete para retirar un elemento del conjunto.

package main

import "fmt"

func main() {
	set := map[string]struct{}{"a": {}, "b": {}}
	delete(set, "a")
	_, ok := set["a"]
	fmt.Println("a in set:", ok)
}

Elección entre bool y struct{}

Ambos funcionan. Use map[T]bool cuando la legibilidad de set[x] como booleano resulte útil. Use map[T]struct{} cuando quiera indicar que el valor es irrelevante y ahorrar memoria en conjuntos grandes.

Comprobación rápida

¿Por qué se suele preferir map[string]struct{} a map[string]bool para los conjuntos?

Resumen

Mapas como conjuntos:

  • Go no tiene un tipo set; use un mapa cuyas claves sean los elementos
  • map[T]bool o map[T]struct{}
  • Son excelentes para eliminar duplicados y comprobar la pertenencia

Preguntas frecuentes

¿La lección «Mapas como conjuntos» es gratis?

Sí — el texto completo de «Mapas como conjuntos» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Go Academy, actualiza a CoddyKit PRO. El curso de Go Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Mapas como conjuntos»?

Use mapas para valores únicos Practicas Go Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Go Academy?

No se requiere experiencia previa. Go Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.

¿Cuánto tiempo toma la lección «Mapas como conjuntos»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Go Academy?

Sí. Cada lección de Go Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Internals de los mapas
  2. Comprobación de existencia
  3. Mapas como conjuntos
  4. Iteración y orden
← Volver a Go Academy