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.
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Défi
FacileConstruisez 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 à :
- Créer un set en utilisant l'idiome Go
map[string]struct{}pour stocker les livres de fiction - Analyser la première chaîne d'entrée en la divisant par les virgules pour obtenir les titres de livres individuels
- Ajouter chaque livre à votre set en utilisant le littéral de structure vide
{}comme valeur - Analyser la deuxième chaîne d'entrée en la divisant par les virgules pour obtenir la liste des livres à supprimer
- Pour chaque livre à supprimer, vérifier s'il existe dans le set en utilisant l'idiome comma ok
- 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]"
- Si le livre existe dans la collection :
- Utiliser la fonction
delete()pour supprimer les livres qui existent dans le set - 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]"
- 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"
- En-tête :
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
}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
1Structures de contrôle avancées
Switch avec `fallthrough`Sortir de boucles imbriquéesContinuer une boucle spécifiqueL'instruction `goto`Récapitulatif - Contrôle de boucle avancé4Projet : Liste de tâches simple
Configuration du projetAjouter une tâche2Structures et Méthodes
Définir des méthodes sur des structuresReceveurs par valeurReceveurs par pointeurChoisir les receveursMéthodes vs FonctionsRécapitulatif - Comportement des structures5Les Maps en profondeur
Maps de StructsPointeurs comme valeurs de MapTester les Maps NilComparer des MapsRécapitulatif - Compteur de fréquence de mots3Interfaces (Les bases)
Qu'est-ce qu'une Interface ?Définir une InterfaceImplémenter une InterfaceUtiliser les types d'InterfaceInterface videAssertions de typeType SwitchRécapitulatif - Formes et comportements6Go idiomatique : Les ensembles
L'idiome des ensembles en GoCréer un ensembleAjouter à un ensembleVérifier l'appartenanceSupprimer d'un ensembleItérer sur un ensembleRécapitulatif - Noms d'utilisateur uniques