Collecteur d'éléments uniques
Fait partie de la section Logique & Flux du Journey GO de Coddy — leçon 68 sur 68.
Défi
FacileCréez un système de suppression de doublons qui utilise le motif d'ensemble idiomatique de Go pour filtrer les éléments uniques à partir de collections de chaînes de caractères. Ce défi testera votre capacité à utiliser l'idiome map[string]struct{} pour suivre les éléments déjà vus et construire des collections ne contenant que des éléments uniques.
Vous recevrez deux entrées :
- Une chaîne contenant des éléments séparés par des virgules (par exemple,
"apple,banana,apple,orange,banana,grape,apple") - Une chaîne contenant des éléments supplémentaires à fusionner, également séparés par des virgules (par exemple,
"kiwi,apple,mango,banana,kiwi")
Votre tâche consiste à :
- Créer une fonction appelée
getUniqueItemsqui prend une tranche (slice) de chaînes de caractères et renvoie une nouvelle tranche contenant uniquement les chaînes uniques - À l'intérieur de cette fonction, utiliser l'idiome
map[string]struct{}pour suivre quels éléments ont été vus - Parcourir la tranche d'entrée et pour chaque élément :
- Vérifier si l'élément existe dans votre ensemble en utilisant l'idiome "comma ok"
- Si l'élément n'a pas été vu auparavant, l'ajouter à la fois à l'ensemble et à la tranche de résultat
- Analyser la première entrée en la découpant au niveau des virgules pour obtenir la liste d'éléments initiale
- Analyser la deuxième entrée en la découpant au niveau des virgules pour obtenir les éléments supplémentaires
- Afficher l'en-tête du système :
"=== UNIQUE ITEM COLLECTOR ===" - Afficher les éléments originaux :
"Original items: [liste de tous les éléments originaux séparés par des virgules]" - Afficher les éléments supplémentaires :
"Additional items: [liste de tous les éléments supplémentaires séparés par des virgules]" - Utiliser votre fonction
getUniqueItemspour obtenir les éléments uniques de la liste originale - Afficher les éléments originaux uniques :
"Unique original items: [liste des éléments uniques de la liste originale séparés par des virgules]" - Combiner les deux tranches d'entrée en une seule tranche contenant tous les éléments
- Utiliser votre fonction
getUniqueItemspour obtenir les éléments uniques de la liste combinée - Afficher les éléments uniques finaux :
"Final unique items: [liste de tous les éléments uniques séparés par des virgules]" - Afficher les statistiques de la collection :
"=== COLLECTION STATISTICS ===""Total original items: [nombre d'éléments originaux]""Total additional items: [nombre d'éléments supplémentaires]""Total combined items: [nombre de tous les éléments combinés]""Unique items found: [nombre d'éléments uniques]""Duplicates removed: [total des éléments combinés moins les éléments uniques]"
- Afficher le message de fin :
"Unique item collection completed successfully"
Utilisez le package strings pour découper les chaînes d'entrée et le package fmt pour la sortie. Lors de la jointure des éléments pour l'affichage, utilisez strings.Join avec une virgule comme séparateur. Ce défi démontre comment l'idiome d'ensemble de Go résout efficacement le problème courant de la suppression des doublons dans les collections, un motif que vous utiliserez fréquemment dans les applications de traitement de données.
Essayez vous-même
package main
import (
"fmt"
"strings"
)
func main() {
// Lire l'entrée
var input1 string
var input2 string
fmt.Scanln(&input1)
fmt.Scanln(&input2)
// Analyser les chaînes d'entrée en tranches (slices)
originalItems := strings.Split(input1, ",")
additionalItems := strings.Split(input2, ",")
// TODO: Écrivez votre code ici
// 1. Créer la fonction getUniqueItems qui utilise l'idiome map[string]struct{}
// 2. Traiter les éléments originaux pour obtenir les éléments uniques
// 3. Combiner les deux tranches et obtenir les éléments uniques de la liste combinée
// 4. Calculer les statistiques
// Afficher l'en-tête du système
fmt.Println("=== UNIQUE ITEM COLLECTOR ===")
// Afficher les éléments originaux et supplémentaires
fmt.Printf("Original items: %s\n", strings.Join(originalItems, ","))
fmt.Printf("Additional items: %s\n", strings.Join(additionalItems, ","))
// TODO: Afficher les éléments originaux uniques, les éléments uniques finaux et les statistiques
// Utiliser fmt.Printf et strings.Join pour le formatage de la sortie
}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 comportements