Menu
Coddy logo textTech

Adicionando a um Conjunto

Parte da seção Lógica & Fluxo do Journey de GO da Coddy. Lição 33 de 68.

Agora que você criou um conjunto, o próximo passo é aprender a adicionar elementos a ele. Como um conjunto em Go é, na verdade, um map internamente, adicionar um elemento a um conjunto é idêntico a adicionar uma chave a um map.

Para adicionar um elemento ao seu conjunto, basta atribuir o valor de struct vazio a uma nova chave:

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

A sintaxe struct{}{} cria um literal de struct vazio. O primeiro struct{} especifica o tipo, e o segundo {} o inicializa. Essa é a maneira padrão de adicionar elementos a um conjunto em Go.

A vantagem dessa abordagem é que, se você tentar adicionar o mesmo elemento novamente, ele simplesmente sobrescreverá a entrada existente, mantendo a propriedade de exclusividade do conjunto.

Observe que struct{}{} é a única sintaxe válida para essa atribuição: escrever apenas {} sem o nome do tipo causa um erro de compilação: missing type in composite literal. O tipo deve sempre ser fornecido explicitamente ao atribuir um valor a uma chave de mapa fora de um literal de mapa.

Adicionar elementos a um conjunto é rápido e simples, aproveitando a implementação eficiente de mapas do Go e, ao mesmo tempo, oferecendo um comportamento genuíno de conjunto para rastrear itens exclusivos.

challenge icon

Desafio

Fácil

Crie um sistema de acompanhamento de habilidades que gerencie as competências técnicas de um desenvolvedor usando o idiom de conjunto do Go. Este desafio demonstra como adicionar novas habilidades a um conjunto, evitando duplicatas e acompanhando o progresso do aprendizado.

Você receberá duas entradas:

  • Uma string que representa o número esperado de habilidades (por exemplo, "5") — isso serve apenas como referência
  • Uma string contendo habilidades separadas por vírgulas (por exemplo, "Go,Docker,Kubernetes,Go,React,Docker,Python")

Sua tarefa é:

  1. Criar um conjunto usando o idiom do Go map[string]struct{} para armazenar habilidades técnicas únicas
  2. Inicializar o conjunto com três habilidades iniciais: "Programming", "Problem Solving" e "Communication"
  3. Analisar a string de entrada dividindo-a nas vírgulas para obter os nomes individuais das habilidades
  4. Processar TODAS as habilidades da string separada por vírgulas (percorrer todo o slice, sem usar o parâmetro de contagem)
  5. Para cada habilidade da entrada, adicioná-la ao conjunto usando struct{}{} como valor
  6. Exibir os resultados do processamento imprimindo cada habilidade conforme ela é processada:
    • Se a habilidade for nova no conjunto: "Learning new skill: [skill]"
    • Se a habilidade já existir no conjunto: "Already mastered: [skill]"
  7. Depois de processar todas as habilidades, exibir um resumo do progresso:
    • "Skills processed: [total_processed]" — use o comprimento do slice de habilidades
    • "New skills learned: [new_skills_count]"
    • "Total skills mastered: [total_unique_skills]"
  8. Por fim, listar todas as habilidades no conjunto de habilidades do desenvolvedor:
    • Cabeçalho: "Complete skill set:"
    • Cada habilidade em uma linha separada: "✓ [skill]"

Importante: Use range para percorrer todas as habilidades no slice, não o parâmetro de contagem. A contagem é fornecida como referência, mas não deve controlar seu loop. Use o pacote strings para dividir a string de entrada. Para verificar se uma habilidade já existe antes de adicioná-la, use o idiom comma ok: _, exists := skillSet[skill]. Este desafio demonstra como adicionar elementos a um conjunto do Go lida automaticamente com a unicidade, além de oferecer um desempenho rápido de consulta para testar a associação.

Experimente você mesmo

package main

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

func main() {
	// Ler entrada
	var countStr string
	var skillsStr string
	fmt.Scanln(&countStr)
	fmt.Scanln(&skillsStr)
	
	// Converter a string count para inteiro (apenas para referência - não usado no loop)
	_, _ = strconv.Atoi(countStr)
	
	// Inicializar o conjunto de habilidades com habilidades iniciais
	skillSet := map[string]struct{}{
		"Programming":     struct{}{},
		"Problem Solving": struct{}{},
		"Communication":   struct{}{},
	}
	
	// Dividir a string de habilidades em habilidades individuais
	skills := strings.Split(skillsStr, ",")
	
	// TODO: Escreva seu código abaixo
	// Processar cada habilidade usando range para iterar sobre TODAS as habilidades no slice
	// Usar o idioma comma ok: _, exists := skillSet[skill]
	// Adicionar novas habilidades usando: skillSet[skill] = struct{}{}
	// Exibir os resultados do processamento para cada habilidade
	// Calcular e exibir o resumo do progresso usando len(skills)
	// List all skills in the complete skill set (consider sorting for consistent output)
	
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Lógica & Fluxo

Pratique por conta própria: Compilador de Go online