Menu
Coddy logo textTech

Elemente zu einem Set hinzufügen

Teil des Abschnitts Logik & Ablauf der GO-Journey von Coddy — Lektion 33 von 68.

Nachdem Sie nun ein Set erstellt haben, besteht der nächste Schritt darin, zu lernen, wie man Elemente hinzufügt. Da ein Go-Set im Grunde eine Map ist, ist das Hinzufügen eines Elements zu einem Set identisch mit dem Hinzufügen eines Schlüssels zu einer Map.

Um ein Element zu Ihrem Set hinzuzufügen, weisen Sie einfach den leeren struct-Wert einem neuen Schlüssel zu:

colors["yellow"] = struct{}{}

Die struct{}{}-Syntax erstellt ein leeres Struct-Literal. Das erste struct{} gibt den Typ an, und das zweite {} initialisiert ihn. Dies ist der Standardweg, um Elemente zu einem Set in Go hinzuzufügen.

Das Schöne an diesem Ansatz ist, dass beim Versuch, dasselbe Element erneut hinzuzufügen, der vorhandene Eintrag einfach überschrieben wird, wodurch die Eindeutigkeitseigenschaft des Sets erhalten bleibt.

Beachten Sie, dass struct{}{} die einzige gültige Syntax für diese Zuweisung ist – das Schreiben von nur {} ohne den Typnamen führt zu einem Kompilierungsfehler: missing type in composite literal. Der Typ muss immer explizit angegeben werden, wenn ein Wert einem Map-Schlüssel außerhalb eines Map-Literals zugewiesen wird.

Das Hinzufügen von Elementen zu einem Set ist schnell und unkompliziert. Dabei wird die effiziente Map-Implementierung von Go genutzt, während Sie echtes Set-Verhalten zur Verfolgung eindeutiger Elemente erhalten.

challenge icon

Aufgabe

Einfach

Erstellen Sie ein Skill-Tracking-System, das die technischen Fähigkeiten eines Entwicklers mithilfe des Go-Set-Idioms verwaltet. Diese Herausforderung zeigt, wie man neue Fähigkeiten zu einem Set hinzufügt, Duplikate verhindert und den Lernfortschritt verfolgt.

Sie erhalten zwei Eingaben:

  • Einen String, der die erwartete Anzahl an Fähigkeiten darstellt (z. B. "5") - dies dient nur als Referenz
  • Einen String, der Fähigkeiten enthält, die durch Kommas getrennt sind (z. B. "Go,Docker,Kubernetes,Go,React,Docker,Python")

Ihre Aufgabe ist es:

  1. Erstellen Sie ein Set mit dem Go-Idiom map[string]struct{}, um eindeutige technische Fähigkeiten zu speichern
  2. Initialisieren Sie das Set mit drei Start-Fähigkeiten: "Programming", "Problem Solving" und "Communication"
  3. Verarbeiten Sie den Eingabestring, indem Sie ihn an den Kommas aufteilen, um einzelne Skill-Namen zu erhalten
  4. Verarbeiten Sie ALLE Fähigkeiten aus dem kommagetrennten String (iterieren Sie durch den gesamten Slice, ohne den count-Parameter zu verwenden)
  5. Fügen Sie jede Fähigkeit aus der Eingabe Ihrem Set hinzu, wobei Sie struct{}{} als Wert verwenden
  6. Zeigen Sie die Verarbeitungsergebnisse an, indem Sie jede Fähigkeit ausgeben, während sie verarbeitet wird:
    • Wenn die Fähigkeit neu im Set ist: "Learning new skill: [skill]"
    • Wenn die Fähigkeit bereits im Set vorhanden ist: "Already mastered: [skill]"
  7. Nach der Verarbeitung aller Fähigkeiten zeigen Sie eine Zusammenfassung des Fortschritts an:
    • "Skills processed: [total_processed]" - verwenden Sie die Länge des Skill-Slices
    • "New skills learned: [new_skills_count]"
    • "Total skills mastered: [total_unique_skills]"
  8. Listen Sie abschließend alle Fähigkeiten im Skill-Set des Entwicklers auf:
    • Überschrift: "Complete skill set:"
    • Jede Fähigkeit in einer eigenen Zeile: "✓ [skill]"

Wichtig: Verwenden Sie range, um über alle Fähigkeiten im Slice zu iterieren, nicht den count-Parameter. Der count wird als Referenz bereitgestellt, sollte aber Ihre Schleife nicht steuern. Verwenden Sie das strings-Paket, um den Eingabestring aufzuteilen. Um zu prüfen, ob eine Fähigkeit bereits existiert, bevor Sie sie hinzufügen, verwenden Sie das Comma-Ok-Idiom: _, exists := skillSet[skill]. Diese Herausforderung zeigt, wie das Hinzufügen von Elementen zu einem Go-Set automatisch die Eindeutigkeit handhabt und gleichzeitig eine schnelle Performance für die Prüfung der Mitgliedschaft bietet.

Probier es selbst

package main

import (
	"fmt"
	"sort"
	"strconv"
	"strings"
)

func main() {
	// Eingabe lesen
	var countStr string
	var skillsStr string
	fmt.Scanln(&countStr)
	fmt.Scanln(&skillsStr)
	
	// Konvertiere den count-String in einen Integer (nur zur Referenz - wird nicht in der Schleife verwendet)
	_, _ = strconv.Atoi(countStr)
	
	// Initialisiere das skillSet mit Start-Skills
	skillSet := map[string]struct{}{
		"Programming":     struct{}{},
		"Problem Solving": struct{}{},
		"Communication":   struct{}{},
	}
	
	// Teile den skills-String in einzelne Skills auf
	skills := strings.Split(skillsStr, ",")
	
	// TODO: Schreibe deinen Code unten
	// Verarbeite jeden Skill mit range, um über ALLE Skills im Slice zu iterieren
	// Verwende das comma ok Idiom: _, exists := skillSet[skill]
	// Füge neue Skills hinzu mit: skillSet[skill] = struct{}{}
	// Zeige die Verarbeitungsergebnisse für jeden Skill an
	// Berechne und zeige die Fortschrittszusammenfassung unter Verwendung von len(skills) an
	// Liste alle Skills im vollständigen Skill-Set auf (erwäge eine Sortierung für eine konsistente Ausgabe)
	
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Logik & Ablauf