Menu
Coddy logo textTech

Añadir a un Set

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

Ahora que has creado un conjunto, el siguiente paso es aprender cómo añadirle elementos. Dado que un conjunto en Go es en realidad un mapa por debajo, añadir un elemento a un conjunto es idéntico a añadir una clave a un mapa.

Para añadir un elemento a tu conjunto, simplemente asignas el valor de la estructura vacía a una nueva clave:

colors["yellow"] = struct{}{}

La sintaxis struct{}{} crea un literal de estructura vacío. El primer struct{} especifica el tipo, y el segundo {} lo inicializa. Esta es la forma estándar de añadir elementos a un conjunto en Go.

Lo bueno de este enfoque es que si intentas añadir el mismo elemento de nuevo, simplemente sobrescribe la entrada existente, manteniendo la propiedad de unicidad del conjunto.

Ten en cuenta que struct{}{} es la única sintaxis válida para esta asignación; escribir simplemente {} sin el nombre del tipo provoca un error de compilación: missing type in composite literal. El tipo siempre debe proporcionarse explícitamente al asignar un valor a una clave de mapa fuera de un literal de mapa.

Agregar elementos a un conjunto es rápido y sencillo, aprovechando la eficiente implementación de map de Go mientras te brinda un comportamiento de conjunto real para el seguimiento de elementos únicos.

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

Construye un sistema de seguimiento de habilidades que gestione las capacidades técnicas de un desarrollador utilizando el modismo de conjunto (set) en Go. Este desafío demuestra cómo agregar nuevas habilidades a un conjunto evitando duplicados y realizando un seguimiento del progreso de aprendizaje.

Recibirás dos entradas:

  • Una cadena que representa el número esperado de habilidades (por ejemplo, "5"); esto es solo para referencia.
  • Una cadena que contiene habilidades separadas por comas (por ejemplo, "Go,Docker,Kubernetes,Go,React,Docker,Python")

Tu tarea es:

  1. Crear un conjunto utilizando el modismo de Go map[string]struct{} para almacenar habilidades técnicas únicas
  2. Inicializar el conjunto con tres habilidades iniciales: "Programming", "Problem Solving", y "Communication"
  3. Analizar la cadena de entrada dividiéndola por comas para obtener los nombres de las habilidades individuales
  4. Procesar TODAS las habilidades de la cadena separada por comas (itera a través de todo el slice, sin usar el parámetro de conteo)
  5. Para cada habilidad de la entrada, agrégala a tu conjunto usando struct{}{} como valor
  6. Mostrar los resultados del procesamiento imprimiendo cada habilidad a medida que se procesa:
    • Si la habilidad es nueva en el conjunto: "Learning new skill: [skill]"
    • Si la habilidad ya existe en el conjunto: "Already mastered: [skill]"
  7. Después de procesar todas las habilidades, mostrar un resumen del progreso:
    • "Skills processed: [total_processed]" - usa la longitud del slice de habilidades
    • "New skills learned: [new_skills_count]"
    • "Total skills mastered: [total_unique_skills]"
  8. Finalmente, listar todas las habilidades en el conjunto de habilidades del desarrollador:
    • Encabezado: "Complete skill set:"
    • Cada habilidad en una línea separada: "✓ [skill]"

Importante: Usa range para iterar sobre todas las habilidades en el slice, no el parámetro de conteo. El conteo se proporciona como referencia pero no debe controlar tu bucle. Usa el paquete strings para dividir la cadena de entrada. Para verificar si una habilidad ya existe antes de agregarla, usa el modismo comma ok: _, exists := skillSet[skill]. Este desafío demuestra cómo agregar elementos a un conjunto en Go maneja automáticamente la unicidad mientras proporciona un rendimiento de búsqueda rápido para las pruebas de pertenencia.

Hoja de referencia

Para añadir elementos a un conjunto de Go (implementado como map[string]struct{}), asigna una estructura vacía a una nueva clave:

colors["yellow"] = struct{}{}

La sintaxis struct{}{} crea un literal de estructura vacía. El primer struct{} especifica el tipo, y el segundo {} lo inicializa. Esta es la forma estándar de añadir elementos a un conjunto en Go.

Pruébalo tú mismo

package main

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

func main() {
	// Leer entrada
	var countStr string
	var skillsStr string
	fmt.Scanln(&countStr)
	fmt.Scanln(&skillsStr)
	
	// Convertir la cadena de conteo a entero (solo para referencia - no se usa en el bucle)
	_, _ = strconv.Atoi(countStr)
	
	// Inicializar el conjunto de habilidades con habilidades iniciales
	skillSet := map[string]struct{}{
		"Programming":     struct{}{},
		"Problem Solving": struct{}{},
		"Communication":   struct{}{},
	}
	
	// Dividir la cadena de habilidades en habilidades individuales
	skills := strings.Split(skillsStr, ",")
	
	// TODO: Escribe tu código a continuación
	// Procesar cada habilidad usando range para iterar sobre TODAS las habilidades en la rebanada (slice)
	// Usar el modismo comma ok: _, exists := skillSet[skill]
	// Agregar nuevas habilidades usando: skillSet[skill] = struct{}{}
	// Mostrar los resultados del procesamiento para cada habilidad
	// Calcular y mostrar el resumen del progreso usando len(skills)
	// Listar todas las habilidades en el conjunto completo de habilidades (considerar ordenar para una salida consistente)
	
}
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