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]booloumap[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
- Funcionamento interno de maps
- Verificação de existência
- Maps como conjuntos
- Iteração e ordenação