0Pricing
Go Academy · Aula

Maps como conjuntos

Use maps para valores únicos

Maps como conjuntos é uma aula grátis de Go Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Go Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Go Academy inclui 4 aulas no total.

Go não tem um tipo conjunto

Go não tem um tipo conjunto integrado. A forma idiomática de representar um conjunto de valores exclusivos é usar um mapa cujas chaves são os elementos do conjunto.

Mapa de booleanos

Uma abordagem é usar map[string]bool. A presença de uma chave, juntamente com o valor true, significa que o elemento está no conjunto.

package main

import "fmt"

func main() {
	set := map[string]bool{}
	set["apple"] = true
	set["banana"] = true
	fmt.Println(set)
}

Verificando o pertencimento

Use vírgula-ok ou leia o booleano diretamente para verificar o pertencimento.

package main

import "fmt"

func main() {
	set := map[string]bool{"apple": true}
	fmt.Println(set["apple"])
	fmt.Println(set["cherry"])
}

Mapa de estruturas vazias

Um conjunto mais eficiente em termos de memória usa map[string]struct{}. Uma estrutura vazia ocupa zero bytes, portanto você armazena apenas as chaves.

package main

import "fmt"

func main() {
	set := map[string]struct{}{}
	set["x"] = struct{}{}
	_, ok := set["x"]
	fmt.Println("x in set:", ok)
}

Por que usar uma estrutura vazia

O valor nunca importa em um conjunto; apenas a chave importa. struct{}{} indica que você pretende ignorar os valores e não usa memória extra por entrada.

Adicionando elementos

Adicionar uma chave duplicada não tem efeito, portanto o conjunto garante exclusividade naturalmente.

package main

import "fmt"

func main() {
	set := map[string]struct{}{}
	set["a"] = struct{}{}
	set["a"] = struct{}{}
	fmt.Println("size:", len(set))
}

Removendo duplicatas

Um uso clássico é remover duplicatas de uma fatia. Adicione cada elemento a um conjunto e depois leia de volta as chaves exclusivas.

package main

import "fmt"

func main() {
	input := []string{"a", "b", "a", "c", "b"}
	set := map[string]struct{}{}
	for _, v := range input {
		set[v] = struct{}{}
	}
	fmt.Println("unique count:", len(set))
}

Criando uma fatia exclusiva

Combine o conjunto com uma fatia de resultado para preservar a ordem da primeira ocorrência e remover as duplicatas.

package main

import "fmt"

func main() {
	input := []int{1, 2, 1, 3, 2}
	seen := map[int]struct{}{}
	result := []int{}
	for _, v := range input {
		if _, ok := seen[v]; !ok {
			seen[v] = struct{}{}
			result = append(result, v)
		}
	}
	fmt.Println(result)
}

Interseção de conjuntos

Para encontrar os elementos comuns a dois conjuntos, percorra um deles e mantenha os elementos presentes no outro.

package main

import "fmt"

func main() {
	a := map[int]struct{}{1: {}, 2: {}, 3: {}}
	b := map[int]struct{}{2: {}, 3: {}, 4: {}}
	for k := range a {
		if _, ok := b[k]; ok {
			fmt.Println("common:", k)
		}
	}
}

Removendo de um conjunto

Use delete para remover um elemento do conjunto.

package main

import "fmt"

func main() {
	set := map[string]struct{}{"a": {}, "b": {}}
	delete(set, "a")
	_, ok := set["a"]
	fmt.Println("a in set:", ok)
}

Escolhendo entre booleano e estrutura vazia

Ambas as opções funcionam. Use map[T]bool quando a legibilidade de set[x] como booleano for útil. Use map[T]struct{} quando quiser indicar que o valor é irrelevante e economizar memória em conjuntos grandes.

Verificação rápida

Por que map[string]struct{} costuma ser preferido a map[string]bool para conjuntos?

Recapitulação

Mapas como conjuntos:

  • Go não tem um tipo conjunto; use um mapa indexado pelos elementos
  • map[T]bool ou map[T]struct{}
  • São excelentes para remover duplicatas e verificar pertencimento

Perguntas Frequentes

A aula “Maps como conjuntos” é grátis?

Sim — o texto completo de “Maps como conjuntos” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Go Academy, atualize para CoddyKit PRO. O curso de Go Academy inclui 4 aulas no total.

O que vou aprender em “Maps como conjuntos”?

Use maps para valores únicos Você pratica Go Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Go Academy?

Nenhuma experiência prévia é necessária. Go Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.

Quanto tempo leva a aula “Maps como conjuntos”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Go Academy?

Sim. Cada aula de Go Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Funcionamento interno de maps
  2. Verificação de existência
  3. Maps como conjuntos
  4. Iteração e ordenação
← Voltar para Go Academy