Benzersiz Öge Toplayıcı
Coddy'nin GO Journey'sinin Mantık ve Akış bölümünün bir parçası — ders 68 / 68.
Görev
KolayDizelerden oluşan koleksiyonlardaki benzersiz öğeleri filtrelemek için Go'nun deyimsel (idiomatic) küme desenini kullanan bir kopya kaldırma sistemi oluşturun. Bu zorluk, görülen öğeleri izlemek ve yalnızca benzersiz öğeleri içeren koleksiyonlar oluşturmak için map[string]struct{} deyimini kullanma yeteneğinizi test edecektir.
İki girdi alacaksınız:
- Virgülle ayrılmış öğeler içeren bir dize (örneğin,
"apple,banana,apple,orange,banana,grape,apple") - Birleştirilecek ek öğeleri içeren ve yine virgülle ayrılmış bir dize (örneğin,
"kiwi,apple,mango,banana,kiwi")
Göreviniz şunları yapmaktır:
- Bir dize dilimi (slice) alan ve yalnızca benzersiz dizeleri içeren yeni bir dilim döndüren
getUniqueItemsadında bir fonksiyon oluşturun - Bu fonksiyonun içinde, hangi öğelerin görüldüğünü izlemek için
map[string]struct{}deyimini kullanın - Girdi dilimi boyunca döngü kurun ve her öğe için:
- "comma ok" deyimini kullanarak öğenin kümenizde mevcut olup olmadığını kontrol edin
- Öğe daha önce görülmemişse, onu hem kümeye hem de sonuç dilimine ekleyin
- Başlangıç öğe listesini elde etmek için ilk girdiyi virgüllere göre ayırarak ayrıştırın
- Ek öğeleri elde etmek için ikinci girdiyi virgüllere göre ayırarak ayrıştırın
- Sistem başlığını görüntüleyin:
"=== UNIQUE ITEM COLLECTOR ===" - Orijinal öğeleri görüntüleyin:
"Original items: [tüm orijinal öğelerin virgülle ayrılmış listesi]" - Ek öğeleri görüntüleyin:
"Additional items: [tüm ek öğelerin virgülle ayrılmış listesi]" - Orijinal listedeki benzersiz öğeleri elde etmek için
getUniqueItemsfonksiyonunuzu kullanın - Benzersiz orijinal öğeleri görüntüleyin:
"Unique original items: [orijinal listedeki benzersiz öğelerin virgülle ayrılmış listesi]" - Her iki girdi dilimini tüm öğeleri içeren tek bir dilimde birleştirin
- Birleştirilmiş listedeki benzersiz öğeleri elde etmek için
getUniqueItemsfonksiyonunuzu kullanın - Nihai benzersiz öğeleri görüntüleyin:
"Final unique items: [tüm benzersiz öğelerin virgülle ayrılmış listesi]" - Koleksiyon istatistiklerini görüntüleyin:
"=== COLLECTION STATISTICS ===""Total original items: [orijinal öğelerin sayısı]""Total additional items: [ek öğelerin sayısı]""Total combined items: [birleştirilmiş tüm öğelerin sayısı]""Unique items found: [benzersiz öğelerin sayısı]""Duplicates removed: [toplam birleştirilmiş öğe sayısı eksi benzersiz öğe sayısı]"
- Tamamlanma mesajını görüntüleyin:
"Unique item collection completed successfully"
Girdi dizelerini bölmek için strings paketini ve çıktı için fmt paketini kullanın. Öğeleri görüntülemek için birleştirirken, virgül ayırıcı ile strings.Join kullanın. Bu zorluk, Go'nun küme deyiminin, veri işleme uygulamalarında sıkça kullanacağınız bir desen olan koleksiyonlardan kopyaları kaldırma sorununu ne kadar verimli bir şekilde çözdüğünü göstermektedir.
Kendin dene
package main
import (
"fmt"
"strings"
)
func main() {
// Girdiyi oku
var input1 string
var input2 string
fmt.Scanln(&input1)
fmt.Scanln(&input2)
// Girdi dizelerini dilimlere (slice) ayır
originalItems := strings.Split(input1, ",")
additionalItems := strings.Split(input2, ",")
// TODO: Kodunuzu buraya yazın
// 1. map[string]struct{} yapısını kullanan getUniqueItems fonksiyonunu oluşturun
// 2. Benzersiz öğeleri elde etmek için orijinal öğeleri işleyin
// 3. Her iki dilimi birleştirin ve birleşik listeden benzersiz öğeleri alın
// 4. İstatistikleri hesaplayın
// Sistem başlığını görüntüle
fmt.Println("=== UNIQUE ITEM COLLECTOR ===")
// Orijinal ve ek öğeleri görüntüle
fmt.Printf("Original items: %s\n", strings.Join(originalItems, ","))
fmt.Printf("Additional items: %s\n", strings.Join(additionalItems, ","))
// TODO: Benzersiz orijinal öğeleri, nihai benzersiz öğeleri ve istatistikleri görüntüleyin
// Çıktı biçimlendirmesi için fmt.Printf ve strings.Join kullanın
}Mantık ve Akış bölümündeki tüm dersler
1İleri Seviye Kontrol Akışı
`fallthrough` ile Switchİç İçe Döngülerden ÇıkmaBelirli Bir Döngüye Devam Etme`goto` İfadesiÖzet - İleri Seviye Döngü Kontrolü4Proje: Basit Görev Listesi
Proje KurulumuGörev Ekleme2Structlar ve Metotlar
Structlarda Metot TanımlamaValue Receiver'larPointer Receiver'larReceiver SeçimiMetotlar ve FonksiyonlarÖzet - Struct Davranışı5Derinlemesine Map'ler
Struct Map'leriMap Değeri Olarak Pointer'larNil Map KontrolüMap'leri KarşılaştırmaÖzet - Kelime Frekansı Sayacı3Arayüzler (Temeller)
Arayüz Nedir?Bir Arayüz TanımlamaBir Arayüzü UygulamaArayüz Tiplerini KullanmaBoş ArayüzTip OnaylamalarıTip SeçimiÖzet - Şekiller ve Davranışlar