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.
Desafio
FácilCrie um sistema de gerenciamento de livros de biblioteca que remova livros de diferentes coleções de gêneros usando o idioma de conjuntos do Go. Este desafio demonstra como usar a função delete() para remover elementos de conjuntos enquanto acompanha o processo de remoção.
Você receberá duas entradas:
- Uma string contendo livros da coleção de ficção separados por vírgulas (por exemplo,
"1984,Dune,Foundation,Neuromancer,Brave New World") - Uma string contendo livros a serem removidos separados por vírgulas (por exemplo,
"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 nas vírgulas para obter os títulos individuais dos livros
- Adicionar cada livro ao conjunto usando o literal de struct vazio
{}como valor - Analisar a segunda string de entrada dividindo-a nas 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 que está 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 os livros que existem no conjunto - Depois de 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]"
- Por fim, listar todos os livros restantes na coleção:
- Cabeçalho:
"Remaining books in fiction collection:" - Cada livro em uma linha separada:
"- [book_title]" - Se nenhum livro permanecer:
"- Collection is empty"
- Cabeçalho:
Use o pacote strings para dividir as strings de entrada nas vírgulas. Este desafio demonstra como a função delete() remove elementos com segurança de um conjunto do Go, sem lançar erros mesmo ao tentar remover elementos inexistentes, tornando-a perfeita para operações de limpeza.
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 ÚnicosPratique por conta própria: Compilador de Go online