Sammler für eindeutige Elemente
Teil des Abschnitts Logik & Ablauf der GO-Journey von Coddy — Lektion 68 von 68.
Aufgabe
EinfachErstellen Sie ein System zur Duplikatentfernung, das das idiomatische Set-Muster von Go verwendet, um eindeutige Elemente aus Sammlungen von Strings zu filtern. Diese Herausforderung testet Ihre Fähigkeit, das Idiom map[string]struct{} zu verwenden, um bereits gesehene Elemente zu verfolgen und Sammlungen aufzubauen, die nur eindeutige Elemente enthalten.
Sie erhalten zwei Eingaben:
- Einen String, der durch Kommas getrennte Elemente enthält (z. B.
"apple,banana,apple,orange,banana,grape,apple") - Einen String, der zusätzliche zu verschmelzende Elemente enthält, ebenfalls durch Kommas getrennt (z. B.
"kiwi,apple,mango,banana,kiwi")
Ihre Aufgabe ist es:
- Erstellen Sie eine Funktion namens
getUniqueItems, die ein Slice von Strings entgegennimmt und ein neues Slice zurückgibt, das nur die eindeutigen Strings enthält - Verwenden Sie innerhalb dieser Funktion das Idiom
map[string]struct{}, um zu verfolgen, welche Elemente bereits gesehen wurden - Iterieren Sie durch das Eingabe-Slice und für jedes Element:
- Prüfen Sie mit dem "comma ok"-Idiom, ob das Element in Ihrem Set existiert
- Wenn das Element noch nicht gesehen wurde, fügen Sie es sowohl dem Set als auch dem Ergebnis-Slice hinzu
- Verarbeiten Sie die erste Eingabe, indem Sie sie an den Kommas aufteilen, um die ursprüngliche Artikelliste zu erhalten
- Verarbeiten Sie die zweite Eingabe, indem Sie sie an den Kommas aufteilen, um die zusätzlichen Artikel zu erhalten
- Zeigen Sie den System-Header an:
"=== UNIQUE ITEM COLLECTOR ===" - Zeigen Sie die ursprünglichen Artikel an:
"Original items: [comma-separated list of all original items]" - Zeigen Sie die zusätzlichen Artikel an:
"Additional items: [comma-separated list of all additional items]" - Verwenden Sie Ihre Funktion
getUniqueItems, um eindeutige Artikel aus der ursprünglichen Liste zu erhalten - Zeigen Sie die eindeutigen ursprünglichen Artikel an:
"Unique original items: [comma-separated list of unique items from original list]" - Kombinieren Sie beide Eingabe-Slices zu einem einzigen Slice, das alle Artikel enthält
- Verwenden Sie Ihre Funktion
getUniqueItems, um eindeutige Artikel aus der kombinierten Liste zu erhalten - Zeigen Sie die finalen eindeutigen Artikel an:
"Final unique items: [comma-separated list of all unique items]" - Zeigen Sie die Sammlungsstatistiken an:
"=== 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]"
- Zeigen Sie die Abschlussmeldung an:
"Unique item collection completed successfully"
Verwenden Sie das Paket strings, um Eingabestrings aufzuteilen, und das Paket fmt für die Ausgabe. Wenn Sie Elemente für die Anzeige zusammenfügen, verwenden Sie strings.Join mit einem Komma als Trennzeichen. Diese Herausforderung demonstriert, wie das Set-Idiom von Go das häufige Problem der Duplikatentfernung aus Sammlungen effizient löst – ein Muster, das Sie in Datenverarbeitungsanwendungen häufig verwenden werden.
Probier es selbst
package main
import (
"fmt"
"strings"
)
func main() {
// Eingabe lesen
var input1 string
var input2 string
fmt.Scanln(&input1)
fmt.Scanln(&input2)
// Eingabe-Strings in Slices parsen
originalItems := strings.Split(input1, ",")
additionalItems := strings.Split(input2, ",")
// TODO: Schreiben Sie Ihren Code hier
// 1. Erstellen Sie die Funktion getUniqueItems, die das Idiom map[string]struct{} verwendet
// 2. Verarbeiten Sie die ursprünglichen Elemente, um eindeutige Elemente zu erhalten
// 3. Kombinieren Sie beide Slices und erhalten Sie eindeutige Elemente aus der kombinierten Liste
// 4. Statistiken berechnen
// System-Header anzeigen
fmt.Println("=== UNIQUE ITEM COLLECTOR ===")
// Ursprüngliche und zusätzliche Elemente anzeigen
fmt.Printf("Original items: %s\n", strings.Join(originalItems, ","))
fmt.Printf("Additional items: %s\n", strings.Join(additionalItems, ","))
// TODO: Eindeutige ursprüngliche Elemente, finale eindeutige Elemente und Statistiken anzeigen
// Verwenden Sie fmt.Printf und strings.Join für die Ausgabeformatierung
}Alle Lektionen in Logik & Ablauf
1Fortgeschrittener Kontrollfluss
Switch mit `fallthrough`Abbrechen von verschachtelten SchleifenFortsetzen einer bestimmten SchleifeDie `goto`-AnweisungZusammenfassung – Fortgeschrittene Schleifensteuerung4Projekt: Einfache Aufgabenliste
Projekt-SetupEine Aufgabe hinzufügen2Structs und Methoden
Methoden für Structs definierenValue ReceiverPointer ReceiverReceiver auswählenMethoden vs. FunktionenZusammenfassung – Struct-Verhalten5Maps im Detail
Maps von StructsPointer als Map-WertePrüfen auf Nil-MapsMaps vergleichenZusammenfassung – Wortfrequenz-Zähler8Projekt: Einfache Bestandsverwaltung
ProjektübersichtLagerbestand prüfen11Abschlussherausforderungen
Einfache KontaktlisteEinfacher Zahlen-ValidatorSammler für eindeutige Elemente3Interfaces (Die Grundlagen)
Was ist ein Interface?Ein Interface definierenEin Interface implementierenInterface-Typen verwendenLeeres InterfaceType AssertionsType SwitchZusammenfassung – Formen und Verhalten