Maps de Structs
Fait partie de la section Logique & Flux du Journey GO de Coddy. Leçon 26 sur 68.
Les maps deviennent incroyablement puissantes lorsque vous stockez des structs en tant que valeurs. Ce modèle vous permet d'organiser des données complexes et structurées en utilisant des clés significatives pour une recherche et une récupération faciles.
Lorsque vous utilisez des structures comme valeurs de map, vous créez essentiellement une collection où chaque clé pointe vers un enregistrement de données complet. Voici comment déclarer et initialiser une telle map :
type Student struct {
ID int
Grade string
}
students := map[string]Student{
"Alice": {ID: 101, Grade: "A"},
"Bob": {ID: 102, Grade: "B"},
}Vous pouvez accéder aux données de la structure et les manipuler via la map, comme pour n'importe quelle autre opération sur une map. Pour obtenir les informations d'un étudiant, il vous suffit d'utiliser son nom comme clé :
alice := students["Alice"]
fmt.Println(alice.ID) // affiche : 101
fmt.Println(alice.Grade) // affiche : ACe modèle est extrêmement courant dans les applications Go pour stocker des collections de données liées, telles que des profils d'utilisateurs, des catalogues de produits ou des paramètres de configuration où vous avez besoin à la fois de données structurées et d'un accès rapide basé sur des clés.
Défi
FacileCréez un système de gestion des notes des étudiants à l’aide de maps dont les valeurs sont des structs. Ce défi montre comment organiser des données complexes sur les étudiants à l’aide de clés pertinentes pour effectuer des recherches et des récupérations efficaces.
Vous recevrez deux entrées :
- Une chaîne représentant le nombre d’étudiants (par exemple,
"4") - Une chaîne contenant les données des étudiants au format :
"name1:id1:grade1,name2:id2:grade2,name3:id3:grade3"(par exemple,"Alice:101:A,Bob:102:B,Charlie:103:C,Diana:104:A")
Votre tâche consiste à :
- Définir une structure
Studentavec les champs suivants :ID(int) - l’identifiant de l’étudiantGrade(string) - la note de l’étudiant sous forme de lettre
- Créer une map dont les clés sont les noms des étudiants (chaînes) et les valeurs sont des structures
Student - Analyser les données des étudiants de la deuxième entrée :
- Séparer l’entrée par des virgules pour obtenir les entrées individuelles des étudiants
- Pour chaque entrée, la séparer par des deux-points afin de distinguer le nom, l’ID et la note
- Convertir la chaîne de l’ID en entier
- Créer une structure
Studentet l’ajouter à la map en utilisant le nom comme clé
- Afficher tous les étudiants dans l’ordre alphabétique de leur nom au format :
"[name]: ID [id], Grade [grade]" - Calculer et afficher les statistiques des notes :
- Compter combien d’étudiants ont chaque note (A, B, C, D, F)
- Afficher le nombre pour chaque note présente au format :
"Grade [grade]: [count] students" - Afficher les notes dans l’ordre alphabétique (A, B, C, D, F)
- Trouver et afficher l’étudiant ayant l’ID le plus élevé au format :
"Highest ID: [name] ([id])" - Afficher le nombre total d’étudiants :
"Total students: [count]"
Utilisez le package strconv pour convertir la chaîne de l’ID en entier, ainsi que le package sort pour trier les noms des étudiants par ordre alphabétique. Ce défi montre comment les maps contenant des valeurs de type struct offrent un moyen efficace d’organiser et d’accéder à des collections de données complexes à l’aide d’identifiants pertinents.
Essayez vous-même
package main
import (
"fmt"
)
func main() {
// Lire l'entrée
var numStudentsStr string
var studentData string
fmt.Scanln(&numStudentsStr)
fmt.Scanln(&studentData)
// TODO : Définir la structure Student ici
// TODO : Créer une map pour stocker les étudiants (nom comme clé, structure Student comme valeur)
// TODO : Analyser les données des étudiants et remplir la map
// TODO : Afficher tous les étudiants par ordre alphabétique de nom
// TODO : Calculer et afficher les statistiques de notes
// TODO : Trouver et afficher l'étudiant avec l'ID le plus élevé
// TODO : Afficher le nombre total d'étudiants
}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 comportementsEntraînez-vous par vous-même : Compilateur Go en ligne