Verificare l'appartenenza
Fa parte della sezione Logica e flusso del percorso GO di Coddy. Lezione 34 di 68.
Ora che sai aggiungere elementi al tuo insieme, la prossima operazione essenziale consiste nel verificare se un elemento specifico è presente nell’insieme. È qui che l’idioma «comma ok» di Go diventa incredibilmente utile.
Per verificare se un elemento esiste nel tuo insieme, usa la stessa sintassi che si usa per verificare la presenza di una chiave in una mappa:
_, ok := colors["red"]
if ok {
fmt.Println("Red is in the set")
} else {
fmt.Println("Red is not in the set")
}Il trattino basso _ viene usato perché non ci interessa il valore effettivo (che è sempre una struct vuota). Ci interessa solo la variabile booleana ok, che ci dice se la chiave esiste.
Puoi anche usare questo schema direttamente in un'istruzione if per scrivere codice più conciso:
if _, exists := colors["blue"]; exists {
fmt.Println("Blue is in the set")
}Questo test di appartenenza è rapido ed efficiente e sfrutta l’implementazione ottimizzata delle mappe di Go per offrirti i vantaggi in termini di prestazioni di una vera struttura dati di tipo insieme.
Sfida
FacileCrea un sistema di verifica dei membri di una squadra che controlli se determinate persone fanno parte di una squadra di progetto usando l’idioma dei set di Go. Questa sfida mostra come usare l’idioma comma ok per verificare l’appartenenza a un set.
Riceverai due input:
- Una stringa contenente i membri della squadra separati da virgole (ad es.
"Alice,Bob,Charlie,Diana,Eve") - Una stringa contenente le persone da controllare, separate da virgole (ad es.
"Bob,Frank,Alice,Grace,Charlie")
Il tuo compito è:
- Creare un set usando l’idioma Go
map[string]struct{}per memorizzare i membri della squadra - Analizzare la prima stringa di input dividendola in corrispondenza delle virgole per ottenere i singoli nomi dei membri della squadra
- Aggiungere ogni membro della squadra al set usando il valore struct vuoto
{} - Analizzare la seconda stringa di input dividendola in corrispondenza delle virgole per ottenere l’elenco delle persone da verificare
- Per ogni persona da controllare, usare l’idioma comma ok
_, ok := teamSet[person]per verificare l’appartenenza - Mostrare i risultati della verifica per ogni persona controllata:
- Se la persona fa parte della squadra:
"[person] is on the team" - Se la persona non fa parte della squadra:
"[person] is not on the team"
- Se la persona fa parte della squadra:
- Dopo aver controllato tutte le persone, mostrare un riepilogo:
"Team size: [team_member_count]""People checked: [people_checked_count]""Team members found: [found_count]""Non-team members: [not_found_count]"
Usa il package strings per dividere le stringhe di input in corrispondenza delle virgole. Questa sfida mostra come l’idioma comma ok fornisca un modo sicuro ed efficiente per verificare l’appartenenza a un set Go, restituendo sia il valore sia un booleano che indica se la chiave esiste.
Provalo tu
package main
import (
"fmt"
"strings"
)
func main() {
// Leggi l'input
var teamMembersInput string
var peopleToCheckInput string
fmt.Scanln(&teamMembersInput)
fmt.Scanln(&peopleToCheckInput)
// Analizza le stringhe di input
teamMembers := strings.Split(teamMembersInput, ",")
peopleToCheck := strings.Split(peopleToCheckInput, ",")
// TODO: Scrivi il tuo codice qui sotto
// Crea un insieme usando map[string]struct{}
// Aggiungi i membri del team all'insieme
// Controlla ogni persona usando l'idioma comma ok
// Mostra i risultati della verifica e il riepilogo
}Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Logica e flusso
1Flusso di controllo avanzato
Switch con `fallthrough`Uscire dai cicli annidatiContinuare un ciclo specificoL'istruzione `goto`Riepilogo - Controllo avanzato dei cicli4Progetto: semplice lista di attività
Configurazione del progettoAggiungere un’attività2Struct e metodi
Definire metodi sugli structReceiver per valoreReceiver con puntatoreScegliere i receiverMetodi vs funzioniRiepilogo - comportamento degli struct5Mappe in dettaglio
Mappe di structPuntatori come valori delle mappeVerificare le mappe nilConfrontare le mappeRiepilogo - Contatore della frequenza delle parole3Interfacce (le basi)
Che cos’è un’interfaccia?Definire un’interfacciaImplementare un’interfacciaUsare i tipi interfacciaInterfaccia vuotaAsserzioni di tipoSwitch di tipoRiepilogo: forme e comportamenti6Gli insiemi in Go idiomatico
L'idioma degli insiemi in GoCreare un insiemeAggiungere elementi a un insiemeVerificare l'appartenenzaRimuovere elementi da un insiemeIterare su un insiemeRiepilogo - Nomi utente univociEsercitati da solo: Compilatore Go online