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 verursacht einen Kompilierungsfehler: missing type in composite literal. Der Typ muss immer explizit angegeben werden, wenn einem Map-Schlüssel außerhalb eines Map-Literals ein Wert zugewiesen wird.

Das Hinzufügen von Elementen zu einem Set ist schnell und unkompliziert, wobei die effiziente map-Implementierung von Go genutzt wird, während es Ihnen echtes Set-Verhalten zur Verfolgung eindeutiger Elemente bietet.

quiz iconTeste dich selbst

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

quiz iconTeste dich selbst

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

quiz iconTeste dich selbst

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

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 einem Set neue Fähigkeiten hinzufügt, während Duplikate verhindert werden und der Lernfortschritt verfolgt wird.

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 durch Kommas getrennte Fähigkeiten enthält (z. B. "Go,Docker,Kubernetes,Go,React,Docker,Python")

Ihre Aufgabe ist es:

  1. Erstellen Sie ein Set unter Verwendung des Go-Idioms 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. Parsen Sie den Eingabestring, indem Sie ihn an den Kommas aufteilen, um die einzelnen 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 für jede Fähigkeit aus der Eingabe diese 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 skills-Slices
    • "New skills learned: [new_skills_count]"
    • "Total skills mastered: [total_unique_skills]"
  8. Listen Sie schließlich alle Fähigkeiten im Skill-Set des Entwicklers auf:
    • Header: "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 Lookup-Performance für die Prüfung der Mitgliedschaft bietet.

Spickzettel

Um Elemente zu einem Go-Set hinzuzufügen (implementiert als map[string]struct{}), weisen Sie einem neuen Schlüssel eine leere Struktur zu:

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

Die struct{}{} Syntax erstellt ein leeres Struktur-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.

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)
	
	// Anzahl-String in Ganzzahl umwandeln (nur zur Referenz - wird nicht in der Schleife verwendet)
	_, _ = strconv.Atoi(countStr)
	
	// Skill-Set mit Starter-Skills initialisieren
	skillSet := map[string]struct{}{
		"Programming":     struct{}{},
		"Problem Solving": struct{}{},
		"Communication":   struct{}{},
	}
	
	// Skill-String in einzelne Skills aufteilen
	skills := strings.Split(skillsStr, ",")
	
	// TODO: Schreiben Sie Ihren Code unten
	// Verarbeiten Sie jeden Skill mit range, um über ALLE Skills im Slice zu iterieren
	// Verwenden Sie das Comma-Ok-Idiom: _, exists := skillSet[skill]
	// Neue Skills hinzufügen mit: skillSet[skill] = struct{}{}
	// Verarbeitungsergebnisse für jeden Skill anzeigen
	// Fortschrittszusammenfassung berechnen und anzeigen unter Verwendung von len(skills)
	// Alle Skills im vollständigen Skill-Set auflisten (Sortierung für konsistente Ausgabe in Betracht ziehen)
	
}
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