Menu
Coddy logo textTech

Crear un Set

Parte de la sección Lógica y Flujo del Journey de GO de Coddy — lección 32 de 68.

Ahora que entiendes el concepto detrás del modismo de conjuntos de Go, es hora de ponerlo en práctica creando tu primer conjunto. El proceso es sencillo y sigue los mismos patrones que ya has aprendido con los mapas.

Para crear un conjunto en Go, declaras una variable utilizando el patrón map[T]struct{}, donde T es el tipo de elementos que quieres almacenar. Aquí tienes cómo crear un conjunto para almacenar nombres de colores únicos:

colors := make(map[string]struct{})

También puedes inicializar un conjunto con algunos valores iniciales utilizando la sintaxis de literal de mapa:

colors := map[string]struct{}{
    "red":   {},
    "blue":  {},
    "green": {},
}

Observa cómo cada valor es un literal de struct vacío {}. Esto crea el valor cero de struct{}, que no ocupa espacio en memoria mientras permite que la clave exista en el mapa.

La belleza de este enfoque es que aprovecha la infraestructura de mapas existente de Go mientras proporciona una verdadera semántica de conjuntos: cada nombre de color solo puede aparecer una vez y obtienes tiempos de búsqueda rápidos al igual que con los mapas regulares.

quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

challenge icon

Desafío

Fácil

Crea un rastreador de preferencias de lenguajes de programación que demuestre el modismo de conjuntos (set idiom) en Go para almacenar elementos únicos. Este desafío muestra cómo usar el patrón map[string]struct{} para rastrear lenguajes de programación sin duplicados.

Recibirás dos entradas:

  • Una cadena que representa el número de lenguajes a procesar (por ejemplo, "6")
  • Una cadena que contiene lenguajes de programación separados por comas (por ejemplo, "Go,Python,JavaScript,Go,Java,Python,C++,JavaScript")

Tu tarea es:

  1. Crear un conjunto utilizando el modismo de Go map[string]struct{} para almacenar lenguajes de programación únicos
  2. Analizar la cadena de entrada dividiéndola por comas para obtener los nombres de los lenguajes individuales
  3. Agregar cada lenguaje a tu conjunto utilizando el literal de estructura vacía {} como valor
  4. Mostrar los resultados del procesamiento imprimiendo cada lenguaje a medida que se encuentra:
    • Si el lenguaje es nuevo en el conjunto: "Added: [language]"
    • Si el lenguaje ya existe en el conjunto: "Already exists: [language]"
  5. Después de procesar todos los lenguajes, mostrar un resumen:
    • "Total languages processed: [total_count]"
    • "Unique languages: [unique_count]"
  6. Finalmente, listar todos los lenguajes únicos en el conjunto:
    • Encabezado: "Programming languages in set:"
    • Cada lenguaje en una línea separada: "- [language]"

Usa el paquete strings para dividir la cadena de entrada y el paquete strconv para convertir la cadena de conteo en un entero. Para verificar si un lenguaje ya existe en el conjunto antes de agregarlo, usa el modismo comma ok: _, exists := languageSet[language]. Este desafío demuestra cómo el modismo de conjuntos en Go proporciona una forma eficiente de rastrear elementos únicos y evitar duplicados en tus datos.

Hoja de referencia

Para crear un conjunto (set) en Go, utiliza el patrón map[T]struct{} donde T es el tipo de elemento:

colors := make(map[string]struct{})

También puedes inicializar un conjunto con valores iniciales utilizando la sintaxis de literales de mapa:

colors := map[string]struct{}{
    "red":   {},
    "blue":  {},
    "green": {},
}

Cada valor es un literal de estructura vacía {} que crea el valor cero de struct{} y no ocupa espacio en memoria, permitiendo al mismo tiempo que la clave exista en el mapa.

Para comprobar si un elemento existe en el conjunto, utiliza el modismo "comma ok":

_, exists := languageSet[language]

Pruébalo tú mismo

package main

import (
	"fmt"
	"sort"
	"strconv"
	"strings"
)

func main() {
	// Leer entrada
	var countStr string
	var languagesStr string
	fmt.Scanln(&countStr)
	fmt.Scanln(&languagesStr)
	
	// Convertir la cadena de conteo a entero (no es necesario para este desafío)
	_, _ = strconv.Atoi(countStr)
	
	// Dividir la cadena de lenguajes por comas
	languages := strings.Split(languagesStr, ",")
	
	// Crear un conjunto usando el modismo map[string]struct{}
	languageSet := make(map[string]struct{})
	
	// TODO: Escribe tu código a continuación
	// Procesar cada lenguaje y verificar si existe en el conjunto
	// Usar el modismo comma ok: _, exists := languageSet[language]
	// Imprimir "Added: [language]" o "Already exists: [language]"
	// Agregar lenguajes al conjunto usando un literal de estructura vacía {}
	
	// Imprimir información de resumen
	// Imprimir el total de lenguajes procesados y el conteo de lenguajes únicos
	
	// Imprimir todos los lenguajes únicos en el conjunto
	fmt.Println("Programming languages in set:")
	// Convertir el mapa a slice y ordenar para una salida consistente
	// Listar cada lenguaje con el formato "- [language]"
}
quiz iconPonte a prueba

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