Menu
Coddy logo textTech

Aggiungere elementi a un insieme

Fa parte della sezione Logica e flusso del percorso GO di Coddy. Lezione 33 di 68.

Ora che hai creato un insieme, il passo successivo è imparare ad aggiungervi elementi. Poiché un insieme in Go è in realtà una mappa sottostante, aggiungere un elemento a un insieme equivale ad aggiungere una chiave a una mappa.

Per aggiungere un elemento al tuo set, assegni semplicemente il valore struct vuoto a una nuova chiave:

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

La sintassi struct{}{} crea un valore letterale di struct vuoto. Il primo struct{} specifica il tipo e il secondo {} lo inizializza. Questo è il modo standard per aggiungere elementi a un insieme in Go.

Il vantaggio di questo approccio è che, se provi ad aggiungere di nuovo lo stesso elemento, la voce esistente viene semplicemente sovrascritta, mantenendo la proprietà di unicità dell’insieme.

Nota che struct{}{} è l’unica sintassi valida per questa assegnazione: scrivere solo {} senza il nome del tipo causa un errore di compilazione: tipo mancante nel literal composito. Il tipo deve essere sempre specificato esplicitamente quando si assegna un valore a una chiave di mappa al di fuori di un literal di mappa.

Aggiungere elementi a un set è veloce e semplice: sfrutta l’implementazione efficiente delle mappe di Go e offre il comportamento tipico dei set per tenere traccia degli elementi univoci.

challenge icon

Sfida

Facile

Crea un sistema per tenere traccia delle competenze che gestisca le capacità tecniche di uno sviluppatore usando l’idioma dei set di Go. Questa sfida mostra come aggiungere nuove competenze a un set evitando i duplicati e tenendo traccia dei progressi di apprendimento.

Riceverai due input:

  • Una stringa che rappresenta il numero previsto di competenze (ad es. "5"): serve solo come riferimento
  • Una stringa contenente competenze separate da virgole (ad es. "Go,Docker,Kubernetes,Go,React,Docker,Python")

Il tuo compito è:

  1. Creare un set usando l’idioma di Go map[string]struct{} per memorizzare competenze tecniche uniche
  2. Inizializzare il set con tre competenze iniziali: "Programming", "Problem Solving" e "Communication"
  3. Analizzare la stringa di input dividendola in corrispondenza delle virgole per ottenere i singoli nomi delle competenze
  4. Elaborare tutte le competenze della stringa separate da virgole (scorrere l’intera slice, senza usare il parametro count)
  5. Per ogni competenza ricevuta in input, aggiungerla al set usando struct{}{} come valore
  6. Mostrare i risultati dell’elaborazione stampando ogni competenza man mano che viene elaborata:
    • Se la competenza è nuova per il set: "Learning new skill: [skill]"
    • Se la competenza è già presente nel set: "Already mastered: [skill]"
  7. Dopo aver elaborato tutte le competenze, mostrare un riepilogo dei progressi:
    • "Skills processed: [total_processed]" - usare la lunghezza della slice delle competenze
    • "New skills learned: [new_skills_count]"
    • "Total skills mastered: [total_unique_skills]"
  8. Infine, elencare tutte le competenze nel set di competenze dello sviluppatore:
    • Intestazione: "Complete skill set:"
    • Ogni competenza su una riga separata: "✓ [skill]"

Importante: Usa range per scorrere tutte le competenze nella slice, non il parametro count. Il conteggio viene fornito come riferimento, ma non deve determinare il ciclo. Usa il pacchetto strings per dividere la stringa di input. Per verificare se una competenza esiste già prima di aggiungerla, usa l’idioma comma ok: _, exists := skillSet[skill]. Questa sfida mostra come l’aggiunta di elementi a un set di Go gestisca automaticamente l’unicità, offrendo al contempo prestazioni di ricerca rapide per verificare l’appartenenza.

Provalo tu

package main

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

func main() {
	// Leggi l'input
	var countStr string
	var skillsStr string
	fmt.Scanln(&countStr)
	fmt.Scanln(&skillsStr)
	
	// Converti la stringa del conteggio in un intero (solo come riferimento, non viene usato nel ciclo)
	_, _ = strconv.Atoi(countStr)
	
	// Inizializza l'insieme delle competenze con quelle di partenza
	skillSet := map[string]struct{}{
		"Programming":     struct{}{},
		"Problem Solving": struct{}{},
		"Communication":   struct{}{},
	}
	
	// Suddividi la stringa delle competenze in competenze separate
	skills := strings.Split(skillsStr, ",")
	
	// TODO: Scrivi il tuo codice qui sotto
	// Elabora ogni competenza usando range per iterare su TUTTE le competenze nella slice
	// Usa l'idioma comma ok: _, exists := skillSet[skill]
	// Aggiungi nuove competenze usando: skillSet[skill] = struct{}{}
	// Mostra i risultati dell'elaborazione per ogni competenza
	// Calcola e mostra un riepilogo dei progressi usando len(skills)
	// Elenca tutte le competenze nell'insieme completo (valuta di ordinarle per ottenere un output coerente)
	
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Logica e flusso

Esercitati da solo: Compilatore Go online