El modismo de Set en Go
Parte de la sección Lógica y Flujo del Journey de GO de Coddy — lección 31 de 68.
Go no tiene una estructura de datos de conjunto (set) integrada como muchos otros lenguajes de programación. Sin embargo, los desarrolladores de Go han creado una solución elegante utilizando mapas para simular conjuntos, y este patrón se ha vuelto tan común que se considera Go idiomático.
El modismo de conjuntos (set) en Go utiliza un mapa donde solo te importan las claves, no los valores. Dado que necesitas almacenar algo como valor, los programadores de Go utilizan una estructura vacía struct{}. Aquí está el patrón básico:
var mySet map[string]struct{}El struct vacío struct{} es especial porque ocupa cero bytes de memoria. Esto lo hace perfecto para conjuntos donde solo necesitas rastrear si algo existe o no, sin desperdiciar memoria en valores sin sentido.
Este enfoque aprovecha la propiedad fundamental de las claves de un mapa: deben ser únicas. Cuando agregas un elemento a tu conjunto, en realidad estás agregando una clave al mapa. La unicidad se aplica automáticamente mediante el comportamiento del mapa, lo que te brinda una verdadera semántica de conjunto.
En las próximas lecciones, aprenderás a crear, manipular y trabajar con conjuntos utilizando este patrón idiomático de Go. Esta técnica se utiliza ampliamente en las bases de código de Go para realizar un seguimiento de elementos únicos, implementar algoritmos y resolver problemas en los que se necesita una comprobación de pertenencia rápida.
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Hoja de referencia
Go no tiene una estructura de datos de conjunto (set) integrada, pero utiliza mapas para simular conjuntos con el patrón idiomático:
var mySet map[string]struct{}La estructura vacía struct{} se utiliza como el tipo de valor porque ocupa cero bytes de memoria. Las claves del mapa deben ser únicas, lo que proporciona automáticamente la semántica de conjunto para el seguimiento de elementos únicos.
Pruébalo tú mismo
Esta lección no incluye un desafío de código.
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Lógica y Flujo
1Flujo de control avanzado
Switch con `fallthrough`Salir de bucles anidadosContinuar un bucle específicoLa sentencia `goto`Repaso: Control de bucles avanzado4Proyecto: Lista de tareas sencilla
Configuración del proyectoAñadir una tarea2Estructuras y Métodos
Definición de métodos en estructurasReceptores de valorReceptores de punteroElegir receptoresMétodos vs FuncionesResumen - Comportamiento de estructuras5Mapas en profundidad
Mapas de StructsPunteros como valores de MapVerificación de Maps NilComparación de MapsResumen - Contador de frecuencia de palabras3Interfaces (Conceptos básicos)
¿Qué es una interfaz?Definir una interfazImplementar una interfazUso de tipos de interfazInterfaz vacíaAserciones de tipoType SwitchResumen: Formas y comportamientos6Go idiomático: Sets
El modismo de Set en GoCrear un SetAñadir a un SetComprobar pertenenciaEliminar de un SetIterar sobre un SetResumen: Nombres de usuario únicos