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 des doublons qui utilise le modèle idiomatique d’ensemble de Go pour filtrer les éléments uniques de collections de chaînes. Ce défi mettra à l’épreuve votre capacité à utiliser l’idiome map[string]struct{} pour suivre les éléments déjà rencontrés et créer des collections contenant uniquement 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 accepte une tranche de chaînes 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 les éléments déjà rencontrés - Parcourir la tranche d’entrée et, pour chaque élément :
- Vérifier si l’élément existe dans votre ensemble à l’aide de l’idiome « comma ok »
- Si l’élément n’a pas encore été rencontré, l’ajouter à la fois à l’ensemble et à la tranche de résultats
- Analyser la première entrée en la scindant sur les virgules afin d’obtenir la liste initiale d’éléments
- Analyser la deuxième entrée en la scindant sur les virgules afin d’obtenir les éléments supplémentaires
- Afficher l’en-tête du système :
"=== UNIQUE ITEM COLLECTOR ===" - Afficher les éléments d’origine :
"Original items: [comma-separated list of all original items]" - Afficher les éléments supplémentaires :
"Additional items: [comma-separated list of all additional items]" - Utiliser votre fonction
getUniqueItemspour obtenir les éléments uniques de la liste d’origine - Afficher les éléments uniques d’origine :
"Unique original items: [comma-separated list of unique items from original list]" - 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 finaux uniques :
"Final unique items: [comma-separated list of all unique items]" - Afficher les statistiques de la collection :
"=== COLLECTION STATISTICS ===""Total original items: [count of original items]""Total additional items: [count of additional items]""Total combined items: [count of all items combined]""Unique items found: [count of unique items]""Duplicates removed: [total combined items minus unique items]"
- Afficher le message de fin :
"Unique item collection completed successfully"
Utilisez le package strings pour scinder les chaînes d’entrée et le package fmt pour l’affichage. Lors de la concaténation des éléments pour l’affichage, utilisez strings.Join avec une virgule comme séparateur. Ce défi montre comment l’idiome des ensembles de Go permet de résoudre efficacement le problème courant de suppression des doublons dans les collections, un modèle que vous utiliserez fréquemment dans les applications de traitement des 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 comportementsEntraînez-vous par vous-même : Compilateur Go en ligne