Menu
Coddy logo textTech

Supprimer d'un ensemble

Fait partie de la section Logique & Flux du Journey GO de Coddy — leçon 35 sur 68.

Parfois, vous devez supprimer des éléments de votre ensemble, et Go rend cela simple en utilisant la fonction intégrée delete(). Puisque votre ensemble est en réalité une map sous-jacente, supprimer un élément fonctionne exactement comme supprimer une clé d'une map.

Pour supprimer un élément de votre ensemble, utilisez la fonction delete() avec votre ensemble et l'élément que vous souhaitez supprimer :

delete(colors, "red")

La fonction delete() prend deux paramètres : la map (votre ensemble) et la clé que vous souhaitez supprimer. Si l'élément existe dans l'ensemble, il est supprimé. Si l'élément n'existe pas, la fonction ne fait rien - aucune erreur n'est levée.

Ce comportement est parfait pour les ensembles car vous voulez souvent vous assurer qu'un élément n'est pas présent, peu importe s'il était présent initialement. L'opération est rapide et efficace, tout en conservant les avantages de performance de l'implémentation de map sous-jacente de Go.

quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

challenge icon

Défi

Facile

Construisez un système de gestion de livres de bibliothèque qui supprime des livres de différentes collections de genres en utilisant l'idiome des sets en Go. Ce défi démontre comment utiliser la fonction delete() pour supprimer des éléments des sets tout en suivant le processus de suppression.

Vous recevrez deux entrées :

  • Une chaîne de caractères contenant les livres de la collection de fiction séparés par des virgules (par exemple, "1984,Dune,Foundation,Neuromancer,Brave New World")
  • Une chaîne de caractères contenant les livres à supprimer séparés par des virgules (par exemple, "Dune,Harry Potter,Foundation,Twilight,1984")

Votre tâche consiste à :

  1. Créer un set en utilisant l'idiome Go map[string]struct{} pour stocker les livres de fiction
  2. Analyser la première chaîne d'entrée en la divisant par les virgules pour obtenir les titres de livres individuels
  3. Ajouter chaque livre à votre set en utilisant le littéral de structure vide {} comme valeur
  4. Analyser la deuxième chaîne d'entrée en la divisant par les virgules pour obtenir la liste des livres à supprimer
  5. Pour chaque livre à supprimer, vérifier s'il existe dans le set en utilisant l'idiome comma ok
  6. Afficher le processus de suppression pour chaque livre en cours de traitement :
    • Si le livre existe dans la collection : "Removing: [book_title]"
    • Si le livre n'existe pas dans la collection : "Not found: [book_title]"
  7. Utiliser la fonction delete() pour supprimer les livres qui existent dans le set
  8. Après avoir traité toutes les demandes de suppression, afficher un résumé :
    • "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. Enfin, lister tous les livres restants dans la collection :
    • En-tête : "Remaining books in fiction collection:"
    • Chaque livre sur une ligne séparée : "- [book_title]"
    • Si aucun livre ne reste : "- Collection is empty"

Utilisez le package strings pour diviser les chaînes d'entrée par les virgules. Ce défi démontre comment la fonction delete() supprime en toute sécurité des éléments d'un set Go, sans qu'aucune erreur ne soit générée même lors d'une tentative de suppression d'éléments inexistants, ce qui la rend parfaite pour les opérations de nettoyage.

Aide-mémoire

Pour supprimer des éléments d'un ensemble (set) en Go, utilisez la fonction intégrée delete() :

delete(colors, "red")

La fonction delete() prend deux paramètres : la map (votre ensemble) et la clé que vous souhaitez supprimer. Si l'élément existe, il est supprimé. S'il n'existe pas, la fonction ne fait rien - aucune erreur n'est générée.

Cela rend delete() parfaite pour les ensembles car vous voulez souvent vous assurer qu'un élément n'est pas présent, qu'il ait été là initialement ou non.

Essayez vous-même

package main

import (
	"bufio"
	"fmt"
	"os"
	"sort"
	"strings"
)

func main() {
	// Lire l'entrée à l'aide de Scanner pour prendre en charge les titres de livres avec des espaces
	scanner := bufio.NewScanner(os.Stdin)

	scanner.Scan()
	fictionBooks := scanner.Text()
	scanner.Scan()
	booksToRemove := scanner.Text()

	// Analyser les chaînes d'entrée
	fictionList := strings.Split(fictionBooks, ",")
	removeList := strings.Split(booksToRemove, ",")

	// TODO : Écrivez votre code ci-dessous
	// 1. Créer un ensemble à l'aide de map[string]struct{} pour stocker les livres de fiction
	// 2. Ajouter chaque livre de fictionList à l'ensemble
	// 3. Traiter chaque livre dans removeList et vérifier s'il existe
	// 4. Afficher le processus de suppression et utiliser la fonction delete()
	// 5. Afficher les statistiques récapitulatives
	// 6. Lister les livres restants dans la collection
	// N'oubliez pas de trier les livres restants pour une sortie cohérente

	_ = sort.Strings // supprimez cette ligne une fois que vous utilisez sort
	_ = fmt.Println  // supprimez cette ligne une fois que vous utilisez fmt
}
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Logique & Flux