Menu
Coddy logo textTech

Creare un insieme

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

Ora che hai compreso il concetto alla base dell’idioma dei set di Go, è il momento di metterlo in pratica creando il tuo primo set. Il procedimento è semplice e segue gli stessi schemi che hai già imparato con le mappe.

Per creare un set in Go, dichiari una variabile usando lo schema map[T]struct{}, dove T è il tipo di elementi che vuoi memorizzare. Ecco come creare un set per memorizzare nomi di colori univoci:

colors := make(map[string]struct{})

Puoi anche inizializzare un set con alcuni valori iniziali usando la sintassi dei letterali map:

colors := map[string]struct{}{
    "red":   {},
    "blue":  {},
    "green": {},
}

Nota come ogni valore sia un valore letterale di struct vuoto {}. Questo crea il valore zero di struct{}, che non occupa spazio in memoria pur consentendo alla chiave di esistere nella mappa.

Il bello di questo approccio è che sfrutta l'infrastruttura map già esistente di Go, offrendo al contempo una vera semantica da insieme: ogni nome di colore può comparire una sola volta e la ricerca è veloce, proprio come con le map normali.

challenge icon

Sfida

Facile

Crea un tracker delle preferenze per i linguaggi di programmazione che dimostri l'idioma dei set di Go per memorizzare elementi univoci. Questa sfida mostra come usare il pattern map[string]struct{} per tenere traccia dei linguaggi di programmazione senza duplicati.

Riceverai due input:

  • Una stringa che rappresenta il numero di linguaggi da elaborare (ad es., "6")
  • Una stringa contenente linguaggi di programmazione separati da virgole (ad es., "Go,Python,JavaScript,Go,Java,Python,C++,JavaScript")

Il tuo compito è:

  1. Creare un set usando l'idioma di Go map[string]struct{} per memorizzare i linguaggi di programmazione univoci
  2. Analizzare la stringa di input suddividendola in corrispondenza delle virgole per ottenere i singoli nomi dei linguaggi
  3. Aggiungere ogni linguaggio al set usando il valore di tipo struct vuoto {}
  4. Mostrare i risultati dell'elaborazione stampando ogni linguaggio quando viene incontrato:
    • Se il linguaggio non è ancora presente nel set: "Added: [language]"
    • Se il linguaggio è già presente nel set: "Already exists: [language]"
  5. Dopo aver elaborato tutti i linguaggi, mostrare un riepilogo:
    • "Total languages processed: [total_count]"
    • "Unique languages: [unique_count]"
  6. Infine, elencare tutti i linguaggi univoci nel set:
    • Intestazione: "Programming languages in set:"
    • Ogni linguaggio su una riga separata: "- [language]"

Usa il package strings per suddividere la stringa di input e il package strconv per convertire la stringa che rappresenta il conteggio in un intero. Per verificare se un linguaggio è già presente nel set prima di aggiungerlo, usa l'idioma comma ok: _, exists := languageSet[language]. Questa sfida dimostra come l'idioma dei set di Go fornisca un modo efficiente per tenere traccia degli elementi univoci ed evitare duplicati nei dati.

Provalo tu

package main

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

func main() {
	// Leggi l'input
	var countStr string
	var languagesStr string
	fmt.Scanln(&countStr)
	fmt.Scanln(&languagesStr)
	
	// Converti la stringa count in un intero (non necessario per questa sfida)
	_, _ = strconv.Atoi(countStr)
	
	// Dividi la stringa delle lingue in base alle virgole
	languages := strings.Split(languagesStr, ",")
	
	// Crea un insieme usando l'idioma map[string]struct{}
	languageSet := make(map[string]struct{})
	
	// TODO: Scrivi il tuo codice qui sotto
	// Elabora ogni lingua e verifica se esiste nell'insieme
	// Usa l'idioma comma ok: _, exists := languageSet[language]
	// Stampa "Added: [language]" oppure "Already exists: [language]"
	// Aggiungi le lingue all'insieme usando il letterale struct vuoto {}
	
	// Stampa le informazioni riepilogative
	// Stampa il numero totale di lingue elaborate e il numero di lingue uniche
	
	// Stampa tutte le lingue uniche nell'insieme
	fmt.Println("Programming languages in set:")
	// Converti la map in una slice e ordinala per ottenere un output coerente
	// Elenca ogni lingua nel formato "- [language]"
}
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