Ajouter à un ensemble
Fait partie de la section Logique & Flux du Journey GO de Coddy — leçon 33 sur 68.
Maintenant que vous avez créé un ensemble, la prochaine étape consiste à apprendre comment y ajouter des éléments. Puisqu'un ensemble Go est en réalité une map sous-jacente, ajouter un élément à un ensemble est identique à l'ajout d'une clé à une map.
Pour ajouter un élément à votre ensemble, il vous suffit d'assigner la valeur de structure vide à une nouvelle clé :
colors["yellow"] = struct{}{}La syntaxe struct{}{} crée un littéral de structure vide. Le premier struct{} spécifie le type, et le second {} l'initialise. C'est la manière standard d'ajouter des éléments à un ensemble en Go.
La beauté de cette approche est que si vous essayez d'ajouter à nouveau le même élément, il écrase simplement l'entrée existante, conservant ainsi la propriété d'unicité de l'ensemble.
Notez que struct{}{} est la seule syntaxe valide pour cette affectation — écrire simplement {} sans le nom du type provoque une erreur de compilation : missing type in composite literal. Le type doit toujours être explicitement fourni lors de l'assignation d'une valeur à une clé de map en dehors d'un littéral de map.
L'ajout d'éléments à un ensemble est rapide et simple, tirant parti de l'implémentation efficace des maps de Go tout en vous offrant un véritable comportement d'ensemble pour le suivi d'éléments uniques.
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 suivi des compétences qui gère les capacités techniques d'un développeur en utilisant l'idiome des ensembles (sets) en Go. Ce défi démontre comment ajouter de nouvelles compétences à un ensemble tout en évitant les doublons et en suivant la progression de l'apprentissage.
Vous recevrez deux entrées :
- Une chaîne de caractères représentant le nombre attendu de compétences (par exemple,
"5") - ceci est uniquement à titre de référence - Une chaîne contenant des compétences séparées par des virgules (par exemple,
"Go,Docker,Kubernetes,Go,React,Docker,Python")
Votre tâche consiste à :
- Créer un ensemble en utilisant l'idiome Go
map[string]struct{}pour stocker des compétences techniques uniques - Initialiser l'ensemble avec trois compétences de départ :
"Programming","Problem Solving", et"Communication" - Analyser la chaîne d'entrée en la divisant au niveau des virgules pour obtenir les noms de compétences individuels
- Traiter TOUTES les compétences de la chaîne séparée par des virgules (itérer à travers toute la tranche, sans utiliser le paramètre de comptage)
- Pour chaque compétence de l'entrée, l'ajouter à votre ensemble en utilisant
struct{}{}comme valeur - Afficher les résultats du traitement en imprimant chaque compétence au fur et à mesure qu'elle est traitée :
- Si la compétence est nouvelle dans l'ensemble :
"Learning new skill: [skill]" - Si la compétence existe déjà dans l'ensemble :
"Already mastered: [skill]"
- Si la compétence est nouvelle dans l'ensemble :
- Après avoir traité toutes les compétences, afficher un résumé de la progression :
"Skills processed: [total_processed]"- utilisez la longueur de la tranche de compétences"New skills learned: [new_skills_count]""Total skills mastered: [total_unique_skills]"
- Enfin, lister toutes les compétences de l'ensemble de compétences du développeur :
- En-tête :
"Complete skill set:" - Chaque compétence sur une ligne séparée :
"✓ [skill]"
- En-tête :
Important : Utilisez range pour itérer sur toutes les compétences de la tranche, et non le paramètre de comptage. Le nombre est fourni à titre de référence mais ne doit pas contrôler votre boucle. Utilisez le package strings pour diviser la chaîne d'entrée. Pour vérifier si une compétence existe déjà avant de l'ajouter, utilisez l'idiome comma ok : _, exists := skillSet[skill]. Ce défi démontre comment l'ajout d'éléments à un ensemble Go gère automatiquement l'unicité tout en offrant des performances de recherche rapides pour les tests d'appartenance.
Aide-mémoire
Pour ajouter des éléments à un ensemble Go (implémenté sous la forme de map[string]struct{}), assignez une structure vide à une nouvelle clé :
colors["yellow"] = struct{}{}La syntaxe struct{}{} crée un littéral de structure vide. Le premier struct{} spécifie le type, et le second {} l'initialise. C'est la manière standard d'ajouter des éléments à un ensemble en Go.
Essayez vous-même
package main
import (
"fmt"
"sort"
"strconv"
"strings"
)
func main() {
// Lire l'entrée
var countStr string
var skillsStr string
fmt.Scanln(&countStr)
fmt.Scanln(&skillsStr)
// Convertir la chaîne de comptage en entier (pour référence uniquement - non utilisé dans la boucle)
_, _ = strconv.Atoi(countStr)
// Initialiser l'ensemble de compétences avec des compétences de base
skillSet := map[string]struct{}{
"Programming": struct{}{},
"Problem Solving": struct{}{},
"Communication": struct{}{},
}
// Diviser la chaîne de compétences en compétences individuelles
skills := strings.Split(skillsStr, ",")
// TODO: Écrivez votre code ci-dessous
// Traiter chaque compétence en utilisant range pour itérer sur TOUTES les compétences de la tranche
// Utiliser l'idiome comma ok : _, exists := skillSet[skill]
// Ajouter de nouvelles compétences en utilisant : skillSet[skill] = struct{}{}
// Afficher les résultats du traitement pour chaque compétence
// Calculer et afficher le résumé de la progression en utilisant len(skills)
// Lister toutes les compétences dans l'ensemble complet (envisager un tri pour une sortie cohérente)
}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