Menu
Coddy logo textTech

Créer un ensemble

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

Maintenant que vous comprenez le concept derrière l'idiome de l'ensemble (set) de Go, il est temps de le mettre en pratique en créant votre premier ensemble. Le processus est simple et suit les mêmes schémas que vous avez déjà appris avec les maps.

Pour créer un ensemble en Go, vous déclarez une variable en utilisant le modèle map[T]struct{}, où T est le type d'éléments que vous souhaitez stocker. Voici comment créer un ensemble pour stocker des noms de couleurs uniques :

colors := make(map[string]struct{})

Vous pouvez également initialiser un ensemble avec des valeurs de départ en utilisant la syntaxe littérale de map :

colors := map[string]struct{}{
    "red":   {},
    "blue":  {},
    "green": {},
}

Remarquez comment chaque valeur est un littéral de structure vide {}. Cela crée la valeur zéro de struct{}, qui n'occupe aucun espace mémoire tout en permettant à la clé d'exister dans la map.

La beauté de cette approche est qu'elle exploite l'infrastructure de map existante de Go tout en offrant une véritable sémantique de set - chaque nom de couleur ne peut apparaître qu'une seule fois, et vous obtenez des temps de recherche rapides tout comme avec les maps classiques.

challenge icon

Défi

Facile

Créez un outil de suivi des préférences de langage de programmation qui démontre l'idiome des ensembles (sets) en Go pour stocker des éléments uniques. Ce défi montre comment utiliser le modèle map[string]struct{} pour suivre les langages de programmation sans doublons.

Vous recevrez deux entrées :

  • Une chaîne représentant le nombre de langages à traiter (par exemple, "6")
  • Une chaîne contenant des langages de programmation séparés par des virgules (par exemple, "Go,Python,JavaScript,Go,Java,Python,C++,JavaScript")

Votre tâche consiste à :

  1. Créer un ensemble en utilisant l'idiome Go map[string]struct{} pour stocker des langages de programmation uniques
  2. Analyser la chaîne d'entrée en la divisant au niveau des virgules pour obtenir les noms de langages individuels
  3. Ajouter chaque langage à votre ensemble en utilisant le littéral de structure vide {} comme valeur
  4. Afficher les résultats du traitement en imprimant chaque langage au fur et à mesure qu'il est rencontré :
    • Si le langage est nouveau dans l'ensemble : "Added: [language]"
    • Si le langage existe déjà dans l'ensemble : "Already exists: [language]"
  5. Après avoir traité tous les langages, afficher un résumé :
    • "Total languages processed: [total_count]"
    • "Unique languages: [unique_count]"
  6. Enfin, lister tous les langages uniques de l'ensemble :
    • En-tête : "Programming languages in set:"
    • Chaque langage sur une ligne séparée : "- [language]"

Utilisez le package strings pour diviser la chaîne d'entrée et le package strconv pour convertir la chaîne de comptage en entier. Pour vérifier si un langage existe déjà dans l'ensemble avant de l'ajouter, utilisez l'idiome comma ok : _, exists := languageSet[language]. Ce défi démontre comment l'idiome des ensembles en Go offre un moyen efficace de suivre des éléments uniques et d'éviter les doublons dans vos données.

Essayez vous-même

package main

import (
	"fmt"
	"sort"
	"strconv"
	"strings"
)

func main() {
	// Lire l'entrée
	var countStr string
	var languagesStr string
	fmt.Scanln(&countStr)
	fmt.Scanln(&languagesStr)
	
	// Convertir la chaîne count en entier (non nécessaire pour ce défi)
	_, _ = strconv.Atoi(countStr)
	
	// Diviser la chaîne des langages par des virgules
	languages := strings.Split(languagesStr, ",")
	
	// Créer un ensemble en utilisant l'idiome map[string]struct{}
	languageSet := make(map[string]struct{})
	
	// TODO: Écrivez votre code ci-dessous
	// Traiter chaque langage et vérifier s'il existe dans l'ensemble
	// Utiliser l'idiome comma ok : _, exists := languageSet[language]
	// Afficher "Added: [language]" ou "Already exists: [language]"
	// Ajouter les langages à l'ensemble en utilisant le littéral struct vide {}
	
	// Afficher les informations de résumé
	// Afficher le nombre total de langages traités et le nombre de langages uniques
	
	// Afficher tous les langages uniques de l'ensemble
	fmt.Println("Programming languages in set:")
	// Convertir la map en slice et trier pour un résultat cohérent
	// Lister chaque langage avec le format "- [language]"
}
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