Menu
Coddy logo textTech

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.

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

  1. Créer un ensemble en utilisant l'idiome Go map[string]struct{} pour stocker des compétences techniques uniques
  2. Initialiser l'ensemble avec trois compétences de départ : "Programming", "Problem Solving", et "Communication"
  3. Analyser la chaîne d'entrée en la divisant au niveau des virgules pour obtenir les noms de compétences individuels
  4. 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)
  5. Pour chaque compétence de l'entrée, l'ajouter à votre ensemble en utilisant struct{}{} comme valeur
  6. 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]"
  7. 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]"
  8. 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]"

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