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 a agregarle elementos. Como un conjunto de Go en realidad es un map internamente, agregar un elemento a un conjunto es idéntico a agregar una clave a un map.

Para Add un elemento a tu conjunto, simplemente asignas el valor de estructura vacío a una clave nueva:

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.

La ventaja 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 solo {} sin el nombre del tipo provoca un error de compilación: falta el tipo en el literal compuesto. El tipo siempre debe proporcionarse explícitamente al asignar un valor a una clave de map fuera de un literal de map.

Agregar elementos a un conjunto es rápido y sencillo, ya que aprovecha la eficiente implementación de map de Go y te proporciona un comportamiento real de conjunto para realizar un seguimiento de items únicos.

challenge icon

Desafío

Fácil

Construye un sistema de seguimiento de habilidades que administre las capacidades técnicas de un desarrollador usando el modismo de conjuntos de Go. Este desafío demuestra cómo añadir nuevas habilidades a un conjunto evitando duplicados y siguiendo el progreso de aprendizaje.

Recibirás dos entradas:

  • Una cadena que representa el número esperado de habilidades (por ejemplo, "5"): solo sirve como 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 usando 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 ALL las habilidades de la cadena separada por comas (recorrer toda la rebanada, sin usar el parámetro de cantidad)
  5. Para cada habilidad de la entrada, añadirla al conjunto usando struct{}{} como valor
  6. Mostrar los resultados del procesamiento imprimiendo cada habilidad a medida que se procesa:
    • Si la habilidad es nueva para 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 de la rebanada de habilidades
    • "New skills learned: [new_skills_count]"
    • "Total skills mastered: [total_unique_skills]"
  8. Por último, listar todas las habilidades del conjunto de habilidades del desarrollador:
    • Encabezado: "Complete skill set:"
    • Cada habilidad en una línea separada: "✓ [skill]"

Importante: Usa range para recorrer todas las habilidades de la rebanada, no el parámetro de cantidad. La cantidad se proporciona como referencia, pero no debe controlar tu bucle. Usa el paquete strings para dividir la cadena de entrada. Para comprobar si una habilidad ya existe antes de añadirla, usa el modismo de coma ok: _, exists := skillSet[skill]. Este desafío demuestra cómo añadir elementos a un conjunto de Go gestiona automáticamente la unicidad y, al mismo tiempo, proporciona un rendimiento de búsqueda rápido para comprobar la pertenencia.

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 count a entero (solo como 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 skills en habilidades individuales
	skills := strings.Split(skillsStr, ",")
	
	// TODO: Escribe tu código debajo
	// Procesar cada skill usando range para iterar sobre TODAS las skills en el slice
	// Usar el idioma comma ok: _, exists := skillSet[skill]
	// Agregar nuevas skills usando: skillSet[skill] = struct{}{}
	// Mostrar los resultados del procesamiento para cada skill
	// Calcular y mostrar el resumen de progreso usando len(skills)
	// List all skills in the complete skill set (consider sorting for consistent output)
	
}
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

Practica por tu cuenta: Compilador de Go online