Menu
Coddy logo textTech

Criando um Conjunto

Parte da seção Lógica & Fluxo do Journey de GO da Coddy — lição 32 de 68.

Agora que você entende o conceito por trás do idioma de conjunto do Go, é hora de colocá-lo em prática criando seu primeiro conjunto. O processo é direto e segue os mesmos padrões que você já aprendeu com maps.

Para criar um conjunto (set) em Go, você declara uma variável usando o padrão map[T]struct{}, onde T é o tipo de elementos que você deseja armazenar. Veja como criar um conjunto para armazenar nomes de cores únicos:

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

Você também pode inicializar um set com alguns valores iniciais usando a sintaxe de literal de mapa:

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

Observe como cada valor é um literal de struct vazio {}. Isso cria o valor zero de struct{}, que não ocupa espaço na memória, permitindo que a chave exista no mapa.

A beleza desta abordagem é que ela aproveita a infraestrutura de maps existente do Go, ao mesmo tempo que fornece semântica de conjunto (set) real — cada nome de cor pode aparecer apenas uma vez, e você obtém tempos de busca rápidos, assim como com maps regulares.

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

Crie um rastreador de preferência de linguagem de programação que demonstre o idioma de conjunto (set) do Go para armazenar itens exclusivos. Este desafio mostra como usar o padrão map[string]struct{} para rastrear linguagens de programação sem duplicatas.

Você receberá duas entradas:

  • Uma string representando o número de linguagens a serem processadas (ex: "6")
  • Uma string contendo linguagens de programação separadas por vírgulas (ex: "Go,Python,JavaScript,Go,Java,Python,C++,JavaScript")

Sua tarefa é:

  1. Criar um conjunto usando o idioma do Go map[string]struct{} para armazenar linguagens de programação exclusivas
  2. Analisar a string de entrada dividindo-a por vírgulas para obter nomes de linguagens individuais
  3. Adicionar cada linguagem ao seu conjunto usando o literal de struct vazia {} como valor
  4. Exibir os resultados do processamento imprimindo cada linguagem conforme ela é encontrada:
    • Se a linguagem for nova no conjunto: "Added: [language]"
    • Se a linguagem já existir no conjunto: "Already exists: [language]"
  5. Após processar todas as linguagens, exibir um resumo:
    • "Total languages processed: [total_count]"
    • "Unique languages: [unique_count]"
  6. Finalmente, listar todas as linguagens exclusivas no conjunto:
    • Cabeçalho: "Programming languages in set:"
    • Cada linguagem em uma linha separada: "- [language]"

Use o pacote strings para dividir a string de entrada e o pacote strconv para converter a string de contagem em um número inteiro. Para verificar se uma linguagem já existe no conjunto antes de adicioná-la, use o idioma comma ok: _, exists := languageSet[language]. Este desafio demonstra como o idioma de conjunto do Go fornece uma maneira eficiente de rastrear itens exclusivos e evitar duplicatas em seus dados.

Folha de consulta

Para criar um conjunto (set) em Go, use o padrão map[T]struct{} onde T é o tipo do elemento:

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

Você também pode inicializar um conjunto com valores iniciais usando a sintaxe de literal de mapa:

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

Cada valor é um literal de struct vazia {} que cria o valor zero de struct{} e não ocupa espaço na memória, permitindo que a chave exista no mapa.

Para verificar se um elemento existe no conjunto, use o idioma "comma ok":

_, exists := languageSet[language]

Experimente você mesmo

package main

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

func main() {
	// Ler a entrada
	var countStr string
	var languagesStr string
	fmt.Scanln(&countStr)
	fmt.Scanln(&languagesStr)
	
	// Converter a string de contagem para inteiro (não necessário para este desafio)
	_, _ = strconv.Atoi(countStr)
	
	// Dividir a string de linguagens por vírgulas
	languages := strings.Split(languagesStr, ",")
	
	// Criar um conjunto usando o idioma map[string]struct{}
	languageSet := make(map[string]struct{})
	
	// TODO: Escreva seu código abaixo
	// Processar cada linguagem e verificar se ela existe no conjunto
	// Usar o idioma comma ok: _, exists := languageSet[language]
	// Imprimir "Added: [language]" ou "Already exists: [language]"
	// Adicionar linguagens ao conjunto usando o literal de struct vazia {}
	
	// Imprimir informações de resumo
	// Imprimir o total de linguagens processadas e a contagem de linguagens únicas
	
	// Imprimir todas as linguagens únicas no conjunto
	fmt.Println("Programming languages in set:")
	// Converter o mapa para slice e ordenar para uma saída consistente
	// Listar cada linguagem com o formato "- [language]"
}
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