Menu
Coddy logo textTech

Itérer sur un ensemble

Fait partie de la section Logique & Flux du Journey GO de Coddy. Leçon 36 sur 68.

Maintenant que vous pouvez ajouter, vérifier et supprimer des éléments de votre ensemble, il est temps d'apprendre à parcourir tous les éléments. Puisque votre ensemble Go est basé sur une map, vous pouvez utiliser la boucle familière for...range pour accéder à chaque élément.

Pour itérer sur un set, vous utilisez la même syntaxe que pour itérer sur une map, mais vous ne vous souciez que des clés :

for color := range colors {
    fmt.Println(color)
}

Notez que nous n’utilisons qu’une seule variable dans la boucle de parcours. Comme nous n’avons pas besoin des valeurs (qui sont toutes des structures vides), nous pouvons les ignorer entièrement. Cela affichera chaque couleur de votre ensemble, une par ligne.

Vous pouvez également utiliser la forme à deux variables si vous préférez être explicite sur le fait d'ignorer la valeur :

for color, _ := range colors {
    fmt.Println(color)
}

Gardez à l'esprit que les maps en Go ne garantissent aucun ordre particulier lors de l'itération, de sorte que les éléments de votre ensemble peuvent être affichés dans un ordre différent à chaque exécution du programme. C'est un comportement tout à fait normal pour les ensembles, car ils sont conçus pour tester l'appartenance plutôt que pour maintenir un ordre.

challenge icon

Défi

Facile

Construisez un analyseur de playlists musicales qui traite des collections de chansons et affiche des informations détaillées sur chaque playlist en utilisant l’idiome des ensembles de Go. Ce défi montre comment parcourir des ensembles pour examiner leur contenu et en rendre compte.

Vous recevrez deux entrées :

  • Une chaîne contenant des chansons rock séparées par des virgules (par ex. "Bohemian Rhapsody,Stairway to Heaven,Hotel California,Sweet Child O Mine")
  • Une chaîne contenant des chansons pop séparées par des virgules (par ex. "Shape of You,Blinding Lights,Watermelon Sugar,Levitating")

Votre tâche consiste à :

  1. Créer deux ensembles à l’aide de l’idiome Go map[string]struct{} afin de stocker séparément les chansons rock et les chansons pop
  2. Analyser les deux chaînes d’entrée en les divisant sur les virgules pour obtenir les titres individuels des chansons
  3. Ajouter chaque chanson à l’ensemble approprié en utilisant le littéral de structure vide {} comme valeur
  4. Afficher l’analyse de la playlist rock :
    • En-tête : "Rock Playlist Analysis:"
    • Nombre : "Total rock songs: [count]"
    • En-tête des chansons : "Songs in rock playlist:"
    • Chaque chanson sur une ligne séparée : "♪ [song_title]"
  5. Afficher l’analyse de la playlist pop :
    • En-tête : "Pop Playlist Analysis:"
    • Nombre : "Total pop songs: [count]"
    • En-tête des chansons : "Songs in pop playlist:"
    • Chaque chanson sur une ligne séparée : "♪ [song_title]"
  6. Créer une playlist combinée en fusionnant les deux ensembles dans un nouvel ensemble
  7. Afficher l’analyse de la playlist combinée :
    • En-tête : "Combined Playlist Analysis:"
    • Nombre : "Total unique songs: [count]"
    • En-tête des chansons : "All songs in combined playlist:"
    • Chaque chanson sur une ligne séparée : "♫ [song_title]"
  8. Enfin, afficher un résumé :
    • "Playlist Summary:"
    • "Rock songs: [rock_count]"
    • "Pop songs: [pop_count]"
    • "Combined unique songs: [combined_count]"

Utilisez le package strings pour diviser les chaînes d’entrée sur les virgules. Pour parcourir chaque ensemble, utilisez la boucle for...range avec une seule variable afin d’accéder uniquement aux clés (les titres des chansons). Ce défi montre comment le parcours des ensembles Go permet d’examiner tous les éléments d’une collection, ce qui le rend idéal pour les tâches d’analyse et de génération de rapports.

Essayez vous-même

package main

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

func main() {
	// Lire les lignes complètes en utilisant bufio.Scanner (gère les titres de chansons avec des espaces)
	scanner := bufio.NewScanner(os.Stdin)

	scanner.Scan()
	rockSongs := scanner.Text()
	scanner.Scan()
	popSongs := scanner.Text()

	// Créer des ensembles en utilisant l'idiome Go map[string]struct{}
	rockSet := make(map[string]struct{})
	popSet := make(map[string]struct{})

	// Analyser les chaînes d'entrée et remplir les ensembles
	rockList := strings.Split(rockSongs, ",")
	popList := strings.Split(popSongs, ",")

	// TODO : Écrivez votre code ci-dessous
	// Ajouter les chansons à leurs ensembles respectifs
	// Afficher l'analyse de la playlist rock (trier les chansons pour une sortie cohérente)
	// Afficher l'analyse de la playlist pop (trier les chansons pour une sortie cohérente)
	// Créer et afficher l'analyse de la playlist combinée (trier les chansons pour une sortie cohérente)
	// Afficher le résumé de la playlist
	// Rappel : Convertir les clés de la map en slice, trier, puis itérer pour un ordre cohérent

	_ = rockSet
	_ = popSet
	_ = rockList
	_ = popList
	_ = fmt.Sprintf
	_ = sort.Strings
}
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

Entraînez-vous par vous-même : Compilateur Go en ligne