Vérifier l'appartenance
Fait partie de la section Logique & Flux du Journey GO de Coddy — leçon 34 sur 68.
Maintenant que vous pouvez ajouter des éléments à votre ensemble, la prochaine opération essentielle consiste à vérifier si un élément spécifique existe dans l'ensemble. C'est ici que l'idiome « comma ok » de Go devient incroyablement utile.
Pour vérifier si un élément existe dans votre ensemble, vous utilisez la même syntaxe que pour vérifier une clé dans une map :
_, ok := colors["red"]
if ok {
fmt.Println("Red is in the set")
} else {
fmt.Println("Red is not in the set")
}L'underscore _ est utilisé car la valeur réelle nous importe peu (celle-ci étant toujours une structure vide). Nous nous intéressons uniquement à la variable booléenne ok, qui nous indique si la clé existe.
Vous pouvez également utiliser ce modèle directement dans une instruction if pour un code plus concis :
if _, exists := colors["blue"]; exists {
fmt.Println("Blue is in the set")
}Ce test d'appartenance est rapide et efficace, exploitant l'implémentation optimisée des maps de Go pour vous offrir les avantages de performance d'une véritable structure de données d'ensemble.
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 vérification des membres d'une équipe qui vérifie si des personnes spécifiques font partie d'une équipe de projet en utilisant l'idiome des ensembles (sets) en Go. Ce défi démontre comment utiliser l'idiome comma ok pour tester l'appartenance à un ensemble.
Vous recevrez deux entrées :
- Une chaîne de caractères contenant les membres de l'équipe séparés par des virgules (par exemple,
"Alice,Bob,Charlie,Diana,Eve") - Une chaîne de caractères contenant les personnes à vérifier séparées par des virgules (par exemple,
"Bob,Frank,Alice,Grace,Charlie")
Votre tâche consiste à :
- Créer un ensemble en utilisant l'idiome Go
map[string]struct{}pour stocker les membres de l'équipe - Analyser la première chaîne d'entrée en la divisant au niveau des virgules pour obtenir les noms individuels des membres de l'équipe
- Ajouter chaque membre de l'équipe à votre ensemble en utilisant le littéral de structure vide
{}comme valeur - Analyser la seconde chaîne d'entrée en la divisant au niveau des virgules pour obtenir la liste des personnes à vérifier
- Pour chaque personne à vérifier, utiliser l'idiome comma ok
_, ok := teamSet[person]pour tester l'appartenance - Afficher les résultats de la vérification pour chaque personne vérifiée :
- Si la personne est dans l'équipe :
"[person] is on the team" - Si la personne n'est pas dans l'équipe :
"[person] is not on the team"
- Si la personne est dans l'équipe :
- Après avoir vérifié toutes les personnes, afficher un résumé :
"Team size: [team_member_count]""People checked: [people_checked_count]""Team members found: [found_count]""Non-team members: [not_found_count]"
Utilisez le package strings pour diviser les chaînes d'entrée au niveau des virgules. Ce défi démontre comment l'idiome comma ok offre un moyen sûr et efficace de vérifier l'appartenance à un ensemble en Go, en renvoyant à la fois la valeur et un booléen indiquant si la clé existe.
Aide-mémoire
Pour vérifier si un élément existe dans un ensemble (map), utilisez l'idiome "comma ok" :
_, ok := colors["red"]
if ok {
fmt.Println("Red is in the set")
} else {
fmt.Println("Red is not in the set")
}L'underscore _ ignore la valeur car nous ne nous soucions que de la variable booléenne ok qui indique si la clé existe.
Vous pouvez également utiliser ce motif directement dans une instruction if :
if _, exists := colors["blue"]; exists {
fmt.Println("Blue is in the set")
}Essayez vous-même
package main
import (
"fmt"
"strings"
)
func main() {
// Lire l'entrée
var teamMembersInput string
var peopleToCheckInput string
fmt.Scanln(&teamMembersInput)
fmt.Scanln(&peopleToCheckInput)
// Analyser les chaînes d'entrée
teamMembers := strings.Split(teamMembersInput, ",")
peopleToCheck := strings.Split(peopleToCheckInput, ",")
// TODO: Écrivez votre code ci-dessous
// Créer un ensemble en utilisant map[string]struct{}
// Ajouter les membres de l'équipe à l'ensemble
// Vérifier chaque personne en utilisant l'idiome "comma ok"
// Afficher les résultats de la vérification et le résumé
}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