Menu
Coddy logo textTech

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.

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 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 é:

  1. Criar um conjunto usando o idioma do Go map[string]struct{} para armazenar os livros de ficção
  2. Analisar a primeira string de entrada dividindo-a por vírgulas para obter os títulos dos livros individuais
  3. Adicionar cada livro ao seu conjunto usando o literal de struct vazia {} como valor
  4. Analisar a segunda string de entrada dividindo-a por vírgulas para obter a lista de livros a serem removidos
  5. Para cada livro a ser removido, verificar se ele existe no conjunto usando o idioma comma ok
  6. 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]"
  7. Usar a função delete() para remover livros que existem no conjunto
  8. 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]"
  9. 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"

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
}
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