Removendo de um Conjunto
Parte da seção Lógica & Fluxo do Journey de GO da Coddy — lição 35 de 68.
Às vezes você precisa remover elementos do seu conjunto, e Go torna isso simples usando a função integrada delete(). Como o seu conjunto é, na verdade, um mapa por baixo, remover um elemento funciona exatamente como remover uma chave de um mapa.
Para remover um elemento do seu conjunto, use a função delete() com o seu conjunto e o elemento que você deseja remover:
delete(colors, "red")A função delete() recebe dois parâmetros: o mapa (seu conjunto) e a chave que você deseja remover. Se o elemento existir no conjunto, ele será removido. Se o elemento não existir, a função não faz nada - nenhum erro é lançado.
Este comportamento é perfeito para conjuntos porque muitas vezes você deseja garantir que um elemento não esteja presente, independentemente de ele estar lá inicialmente. A operação é rápida e eficiente, mantendo os benefícios de desempenho da implementação de mapa subjacente do Go.
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Desafio
FácilCrie um sistema de gerenciamento de livros de biblioteca que remove livros de coleções de diferentes gêneros usando o idioma de conjunto (set) do Go. Este desafio demonstra como usar a função delete() para remover elementos de conjuntos enquanto rastreia o processo de remoção.
Você receberá duas entradas:
- Uma string contendo livros na coleção de ficção separados por vírgulas (ex:
"1984,Dune,Foundation,Neuromancer,Brave New World") - Uma string contendo livros para remover separados por vírgulas (ex:
"Dune,Harry Potter,Foundation,Twilight,1984")
Sua tarefa é:
- Criar um conjunto usando o idioma do Go
map[string]struct{}para armazenar os livros de ficção - Analisar a primeira string de entrada dividindo-a por vírgulas para obter os títulos dos livros individuais
- Adicionar cada livro ao seu conjunto usando o literal de struct vazia
{}como valor - Analisar a segunda string de entrada dividindo-a por vírgulas para obter a lista de livros a serem removidos
- Para cada livro a ser removido, verificar se ele existe no conjunto usando o idioma comma ok
- Exibir o processo de remoção para cada livro sendo processado:
- Se o livro existir na coleção:
"Removing: [book_title]" - Se o livro não existir na coleção:
"Not found: [book_title]"
- Se o livro existir na coleção:
- Usar a função
delete()para remover livros que existem no conjunto - Após processar todas as solicitações de remoção, exibir um resumo:
"Initial collection size: [initial_count]""Removal requests: [requests_count]""Books successfully removed: [removed_count]""Books not found: [not_found_count]""Final collection size: [final_count]"
- Finalmente, listar todos os livros restantes na coleção:
- Cabeçalho:
"Remaining books in fiction collection:" - Cada livro em uma linha separada:
"- [book_title]" - Se não restarem livros:
"- Collection is empty"
- Cabeçalho:
Use o pacote strings para dividir as strings de entrada por vírgulas. Este desafio demonstra como a função delete() remove elementos de forma segura de um conjunto em Go, sem lançar erros mesmo ao tentar remover elementos inexistentes, tornando-a perfeita para operações de limpeza.
Folha de consulta
Para remover elementos de um conjunto (set) em Go, use a função integrada delete():
delete(colors, "red")A função delete() recebe dois parâmetros: o mapa (seu conjunto) e a chave que você deseja remover. Se o elemento existir, ele será removido. Se não existir, a função não faz nada - nenhum erro é lançado.
Isso torna o delete() perfeito para conjuntos, já que muitas vezes você deseja garantir que um elemento não esteja presente, independentemente de ele estar lá inicialmente ou não.
Experimente você mesmo
package main
import (
"bufio"
"fmt"
"os"
"sort"
"strings"
)
func main() {
// Lê a entrada usando Scanner para suportar títulos de livros com espaços
scanner := bufio.NewScanner(os.Stdin)
scanner.Scan()
fictionBooks := scanner.Text()
scanner.Scan()
booksToRemove := scanner.Text()
// Analisa as strings de entrada
fictionList := strings.Split(fictionBooks, ",")
removeList := strings.Split(booksToRemove, ",")
// TODO: Escreva seu código abaixo
// 1. Crie um conjunto usando map[string]struct{} para armazenar livros de ficção
// 2. Adicione cada livro da fictionList ao conjunto
// 3. Processe cada livro na removeList e verifique se ele existe
// 4. Exiba o processo de remoção e use a função delete()
// 5. Exiba as estatísticas de resumo
// 6. Liste os livros restantes na coleção
// Lembre-se de ordenar os livros restantes para uma saída consistente
_ = sort.Strings // remova esta linha assim que usar sort
_ = fmt.Println // remova esta linha assim que usar fmt
}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
1Fluxo de Controle Avançado
Switch com `fallthrough`Interrompendo Loops AninhadosContinuando um Loop EspecíficoA Instrução `goto`Recapitulação - Controle de Loop Avançado4Projeto: Lista de Tarefas Simples
Configuração do ProjetoAdicionando uma Tarefa2Structs e Métodos
Definindo Métodos em StructsRecebedores de ValorRecebedores de PonteiroEscolhendo RecebedoresMétodos vs FunçõesRecapitulação - Comportamento de Structs5Mapas em Profundidade
Mapas de StructsPonteiros como Valores de MapVerificando Mapas NilComparando MapasRecapitulação - Contador de Frequência de Palavras3Interfaces (O Básico)
O que é uma Interface?Definindo uma InterfaceImplementando uma InterfaceUsando Tipos de InterfaceInterface VaziaAsserções de TipoType SwitchRecapitulação - Formas e Comportamentos6Go Idiomático: Conjuntos
O Idioma de Conjuntos em GoCriando um ConjuntoAdicionando a um ConjuntoVerificando a Existência de ElementosRemovendo de um ConjuntoIterando sobre um ConjuntoRecapitulação - Nomes de Usuário Únicos