Raccolta di elementi unici
Fa parte della sezione Logica e flusso del percorso GO di Coddy. Lezione 68 di 68.
Sfida
FacileCrea un sistema di rimozione dei duplicati che utilizzi l'idioma set di Go per filtrare gli elementi unici da raccolte di stringhe. Questa sfida metterà alla prova la tua capacità di usare l'idioma map[string]struct{} per tenere traccia degli elementi già incontrati e creare raccolte contenenti solo elementi unici.
Riceverai due input:
- Una stringa contenente elementi separati da virgole (ad es.,
"apple,banana,apple,orange,banana,grape,apple") - Una stringa contenente elementi aggiuntivi da unire, anch'essi separati da virgole (ad es.,
"kiwi,apple,mango,banana,kiwi")
Il tuo compito è:
- Creare una funzione chiamata
getUniqueItemsche accetta uno slice di stringhe e restituisce un nuovo slice contenente solo le stringhe uniche - All'interno di questa funzione, usare l'idioma
map[string]struct{}per tenere traccia degli elementi già incontrati - Iterare attraverso lo slice di input e, per ogni elemento:
- Verificare se l'elemento esiste nel tuo set usando l'idioma comma ok
- Se l'elemento non è già stato incontrato, aggiungerlo sia al set che allo slice dei risultati
- Analizzare il primo input suddividendolo in corrispondenza delle virgole per ottenere l'elenco iniziale di elementi
- Analizzare il secondo input suddividendolo in corrispondenza delle virgole per ottenere gli elementi aggiuntivi
- Visualizzare l'intestazione del sistema:
"=== UNIQUE ITEM COLLECTOR ===" - Visualizzare gli elementi originali:
"Original items: [comma-separated list of all original items]" - Visualizzare gli elementi aggiuntivi:
"Additional items: [comma-separated list of all additional items]" - Usare la funzione
getUniqueItemsper ottenere gli elementi unici dall'elenco originale - Visualizzare gli elementi originali unici:
"Unique original items: [comma-separated list of unique items from original list]" - Unire entrambi gli slice di input in un unico slice contenente tutti gli elementi
- Usare la funzione
getUniqueItemsper ottenere gli elementi unici dall'elenco unito - Visualizzare gli elementi unici finali:
"Final unique items: [comma-separated list of all unique items]" - Visualizzare le statistiche della raccolta:
"=== COLLECTION STATISTICS ===""Total original items: [count of original items]""Total additional items: [count of additional items]""Total combined items: [count of all items combined]""Unique items found: [count of unique items]""Duplicates removed: [total combined items minus unique items]"
- Visualizzare il messaggio di completamento:
"Unique item collection completed successfully"
Usa il package strings per suddividere le stringhe di input e il package fmt per l'output. Quando unisci gli elementi da visualizzare, usa strings.Join con una virgola come separatore. Questa sfida dimostra come l'idioma set di Go risolva in modo efficiente il problema comune della rimozione dei duplicati dalle raccolte, uno schema che userai spesso nelle applicazioni di elaborazione dei dati.
Provalo tu
package main
import (
"fmt"
"strings"
)
func main() {
// Leggi l'input
var input1 string
var input2 string
fmt.Scanln(&input1)
fmt.Scanln(&input2)
// Suddividi le stringhe di input in slice
originalItems := strings.Split(input1, ",")
additionalItems := strings.Split(input2, ",")
// TODO: Scrivi qui il tuo codice
// 1. Crea la funzione getUniqueItems usando l'idioma map[string]struct{}
// 2. Elabora gli elementi originali per ottenere quelli univoci
// 3. Combina le due slice e ottieni gli elementi univoci dall'elenco risultante
// 4. Calcola le statistiche
// Visualizza l'intestazione del sistema
fmt.Println("=== UNIQUE ITEM COLLECTOR ===")
// Visualizza gli elementi originali e quelli aggiuntivi
fmt.Printf("Original items: %s\n", strings.Join(originalItems, ","))
fmt.Printf("Additional items: %s\n", strings.Join(additionalItems, ","))
// TODO: Visualizza gli elementi originali univoci, gli elementi univoci finali e le statistiche
// Usa fmt.Printf e strings.Join per formattare l'output
}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 comportamentiEsercitati da solo: Compilatore Go online