Zbieranie unikalnych elementów
Część sekcji Logika i przepływ sterowania ścieżki GO w Coddy. Lekcja 68 z 68.
Wyzwanie
ŁatwyUtwórz system usuwania duplikatów, który wykorzystuje idiomatyczny wzorzec zbioru w Go do filtrowania unikalnych elementów z kolekcji ciągów znaków. To wyzwanie sprawdzi Twoją umiejętność korzystania z idiomu map[string]struct{} do śledzenia napotkanych elementów i tworzenia kolekcji zawierających wyłącznie unikalne elementy.
Otrzymasz dwa wejścia:
- Ciąg znaków zawierający elementy oddzielone przecinkami (np.
"apple,banana,apple,orange,banana,grape,apple") - Ciąg znaków zawierający dodatkowe elementy do połączenia, również oddzielone przecinkami (np.
"kiwi,apple,mango,banana,kiwi")
Twoje zadanie:
- Utworzyć funkcję o nazwie
getUniqueItems, która przyjmuje wycinek ciągów znaków i zwraca nowy wycinek zawierający wyłącznie unikalne ciągi znaków - Wewnątrz tej funkcji użyć idiomu
map[string]struct{}do śledzenia, które elementy zostały już napotkane - Przejść przez wejściowy wycinek i dla każdego elementu:
- Sprawdzić, czy element istnieje w zbiorze, używając idiomu przecinek-ok
- Jeśli element nie został wcześniej napotkany, dodać go zarówno do zbioru, jak i do wycinka wynikowego
- Przetworzyć pierwsze wejście, dzieląc je po przecinkach, aby uzyskać początkową listę elementów
- Przetworzyć drugie wejście, dzieląc je po przecinkach, aby uzyskać dodatkowe elementy
- Wyświetlić nagłówek systemu:
"=== UNIQUE ITEM COLLECTOR ===" - Wyświetlić oryginalne elementy:
"Original items: [comma-separated list of all original items]" - Wyświetlić dodatkowe elementy:
"Additional items: [comma-separated list of all additional items]" - Użyć funkcji
getUniqueItems, aby uzyskać unikalne elementy z oryginalnej listy - Wyświetlić unikalne oryginalne elementy:
"Unique original items: [comma-separated list of unique items from original list]" - Połączyć oba wejściowe wycinki w jeden wycinek zawierający wszystkie elementy
- Użyć funkcji
getUniqueItems, aby uzyskać unikalne elementy z połączonej listy - Wyświetlić końcowe unikalne elementy:
"Final unique items: [comma-separated list of all unique items]" - Wyświetlić statystyki kolekcji:
"=== 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]"
- Wyświetlić komunikat o ukończeniu:
"Unique item collection completed successfully"
Użyj pakietu strings do dzielenia ciągów wejściowych oraz pakietu fmt do wyświetlania wyników. Łącząc elementy na potrzeby wyświetlenia, użyj strings.Join z przecinkiem jako separatorem. To wyzwanie pokazuje, jak idiom zbioru w Go skutecznie rozwiązuje powszechny problem usuwania duplikatów z kolekcji — wzorzec, którego będziesz często używać w aplikacjach do przetwarzania danych.
Spróbuj swoich sił
package main
import (
"fmt"
"strings"
)
func main() {
// Wczytaj dane wejściowe
var input1 string
var input2 string
fmt.Scanln(&input1)
fmt.Scanln(&input2)
// Podziel ciągi wejściowe na listy
originalItems := strings.Split(input1, ",")
additionalItems := strings.Split(input2, ",")
// TODO: Napisz tutaj swój kod
// 1. Utwórz funkcję getUniqueItems, korzystając z idiomu map[string]struct{}
// 2. Przetwórz oryginalne elementy, aby uzyskać unikalne elementy
// 3. Połącz obie listy i uzyskaj unikalne elementy z połączonej listy
// 4. Oblicz statystyki
// Wyświetl nagłówek systemu
fmt.Println("=== UNIQUE ITEM COLLECTOR ===")
// Wyświetl oryginalne i dodatkowe elementy
fmt.Printf("Original items: %s\n", strings.Join(originalItems, ","))
fmt.Printf("Additional items: %s\n", strings.Join(additionalItems, ","))
// TODO: Wyświetl unikalne oryginalne elementy, końcową listę unikalnych elementów i statystyki
// Użyj fmt.Printf i strings.Join do formatowania danych wyjściowych
}Wszystkie lekcje w sekcji Logika i przepływ sterowania
1Zaawansowane sterowanie przepływem
Instrukcja switch z `fallthrough`Przerywanie zagnieżdżonych pętliKontynuowanie określonej pętliInstrukcja `goto`Podsumowanie — zaawansowane sterowanie pętlami4Projekt: Prosta lista zadań
Konfiguracja projektuDodawanie zadania2Struktury i metody
Definiowanie metod dla strukturOdbiorniki przez wartośćOdbiorniki przez wskaźnikWybór odbiornikówMetody a funkcjePodsumowanie — działanie struktur5Mapy w szczegółach
Mapy strukturWskaźniki jako wartości mapSprawdzanie, czy mapy są nilPorównywanie mapPodsumowanie — licznik częstości słów3Interfejsy (podstawy)
Czym jest interfejs?Definiowanie interfejsuImplementowanie interfejsuUżywanie typów interfejsowychPusty interfejsAsercje typuPrzełącznik typówPodsumowanie – kształty i zachowaniaPoćwicz samodzielnie: Kompilator Go online