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ê tem um conjunto criado, o próximo passo é aprender como adicionar elementos a ele. Como um conjunto em Go é, na verdade, um mapa por baixo, adicionar um elemento a um conjunto é idêntico a adicionar uma chave a um mapa.

Para adicionar um elemento ao seu conjunto, basta atribuir o valor da struct vazia 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. Esta é a maneira padrão de adicionar elementos a um conjunto (set) em Go.

A beleza desta abordagem é que, se você tentar adicionar o mesmo elemento novamente, ele simplesmente sobrescreve a entrada existente, mantendo a propriedade de unicidade do conjunto.

Observe que struct{}{} é a única sintaxe válida para esta 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 direto, aproveitando a implementação eficiente de map do Go, ao mesmo tempo que oferece o comportamento real de um conjunto para rastrear itens únicos.

quiz iconTeste seus conhecimentos

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

quiz iconTeste seus conhecimentos

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

quiz iconTeste seus conhecimentos

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

challenge icon

Desafio

Fácil

Construa um sistema de rastreamento de habilidades que gerencia as capacidades técnicas de um desenvolvedor usando o idioma de conjunto (set) do Go. Este desafio demonstra como adicionar novas habilidades a um conjunto, evitando duplicatas e rastreando o progresso do aprendizado.

Você receberá duas entradas:

  • Uma string representando o número esperado de habilidades (ex: "5") - isto é apenas para referência
  • Uma string contendo habilidades separadas por vírgulas (ex: "Go,Docker,Kubernetes,Go,React,Docker,Python")

Sua tarefa é:

  1. Criar um conjunto usando o idioma 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 por vírgulas para obter os nomes das habilidades individuais
  4. Processar TODAS as habilidades da string separada por vírgulas (itere por todo o slice, não use o parâmetro de contagem)
  5. Para cada habilidade da entrada, adicione-a ao seu conjunto usando struct{}{} como o 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. Após 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. Finalmente, 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 iterar sobre todas as habilidades no slice, não o parâmetro de contagem. A contagem é fornecida para 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 idioma comma ok: _, exists := skillSet[skill]. Este desafio demonstra como adicionar elementos a um conjunto em Go lida automaticamente com a unicidade, fornecendo um desempenho de busca rápido para testes de associação.

Folha de consulta

Para adicionar elementos a um set em Go (implementado como map[string]struct{}), atribua uma struct vazia a uma nova chave:

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

A sintaxe struct{}{} cria um literal de struct vazia. O primeiro struct{} especifica o tipo, e o segundo {} o inicializa. Esta é a forma padrão de adicionar elementos a um set em Go.

Experimente você mesmo

package main

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

func main() {
	// Ler a entrada
	var countStr string
	var skillsStr string
	fmt.Scanln(&countStr)
	fmt.Scanln(&skillsStr)
	
	// Converter a string de contagem para inteiro (apenas para referência - não usada 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 na fatia (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)
	// Listar todas as habilidades no conjunto completo de habilidades (considere ordenar para uma saída consistente)
	
}
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