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]boolomap[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
- Internals de los mapas
- Comprobación de existencia
- Mapas como conjuntos
- Iteración y orden