Kümeye Eleman Ekleme
Coddy'nin GO Journey'sinin Mantık ve Akış bölümünün bir parçası. Ders 33 / 68.
Artık bir küme oluşturduğuna göre, sonraki adım kümeye öğe eklemeyi öğrenmektir. Go kümesi aslında temelinde bir map olduğundan, kümeye bir öğe eklemek bir map'e anahtar eklemekle aynıdır.
Kümene bir öğe eklemek için boş yapı değerini yeni bir anahtara atamanız yeterlidir:
colors["yellow"] = struct{}{}struct{}{} söz dizimi boş bir yapı değişmezi oluşturur. İlk struct{} türü belirtir, ikinci {} ise onu başlatır. Bu, Go'da bir kümeye öğe eklemenin standart yoludur.
Bu yaklaşımın güzelliği, aynı öğeyi tekrar eklemeye çalışırsanız mevcut girdinin basitçe üzerine yazması ve kümenin benzersizlik özelliğini korumasıdır.
struct{}{} ifadesinin bu atama için tek geçerli söz dizimi olduğuna dikkat et: tür adı olmadan yalnızca {} yazmak derleme hatasına neden olur: missing type in composite literal. Bir harita değişkeninin dışında bir harita anahtarına değer atanırken tür her zaman açıkça belirtilmelidir.
Bir kümeye öğe eklemek hızlı ve basittir; benzersiz öğeleri izlemek için gerçek küme davranışı sunarken Go'nun verimli map uygulamasından yararlanır.
Görev
KolayGo kümesi deyimini kullanarak bir geliştiricinin teknik becerilerini yöneten bir beceri takip sistemi oluşturun. Bu görev, yinelemeleri önlerken bir kümeye yeni becerilerin nasıl ekleneceğini ve öğrenme ilerlemesinin nasıl takip edileceğini gösterir.
İki girdi alacaksınız:
- Beklenen beceri sayısını temsil eden bir dize (ör.
"5") - bu yalnızca referans içindir - Virgüllerle ayrılmış becerileri içeren bir dize (ör.
"Go,Docker,Kubernetes,Go,React,Docker,Python")
Göreviniz:
- Benzersiz teknik becerileri depolamak için Go deyimi olan
map[string]struct{}kullanarak bir küme oluşturun - Kümeyi üç başlangıç becerisiyle başlatın:
"Programming","Problem Solving"ve"Communication" - Bireysel beceri adlarını elde etmek için girdi dizesini virgüllere göre bölerek ayrıştırın
- Virgüllerle ayrılmış dizedeki ALL becerileri işleyin (sayım parametresini kullanmak yerine dilimin tamamı üzerinde yineleme yapın)
- Girdideki her beceriyi, değer olarak
struct{}{}kullanarak kümenize ekleyin - Her beceri işlenirken yazdırarak işleme sonuçlarını görüntüleyin:
- Beceri kümede yeniyse:
"Learning new skill: [skill]" - Beceri kümede zaten varsa:
"Already mastered: [skill]"
- Beceri kümede yeniyse:
- Tüm becerileri işledikten sonra bir ilerleme özeti görüntüleyin:
"Skills processed: [total_processed]"- beceriler diliminin uzunluğunu kullanın"New skills learned: [new_skills_count]""Total skills mastered: [total_unique_skills]"
- Son olarak geliştiricinin beceri kümesindeki tüm becerileri listeleyin:
- Başlık:
"Complete skill set:" - Her beceri ayrı bir satırda:
"✓ [skill]"
- Başlık:
Önemli: Dilimdeki tüm beceriler üzerinde yineleme yapmak için sayım parametresi yerine range kullanın. Sayım referans amacıyla sağlanmıştır, ancak döngünüzü kontrol etmemelidir. Girdi dizesini bölmek için strings paketini kullanın. Bir beceriyi eklemeden önce zaten var olup olmadığını kontrol etmek için virgüllü ok deyimini kullanın: _, exists := skillSet[skill]. Bu görev, bir Go kümesine öğe eklemenin üyelik testi için hızlı arama performansı sağlarken benzersizliği otomatik olarak nasıl yönettiğini gösterir.
Kendin dene
package main
import (
"fmt"
"sort"
"strconv"
"strings"
)
func main() {
// Girdiyi oku
var countStr string
var skillsStr string
fmt.Scanln(&countStr)
fmt.Scanln(&skillsStr)
// count string'ini tamsayıya dönüştür (yalnızca referans için - döngüde kullanılmaz)
_, _ = strconv.Atoi(countStr)
// Başlangıç becerileriyle skill set'i başlat
skillSet := map[string]struct{}{
"Programming": struct{}{},
"Problem Solving": struct{}{},
"Communication": struct{}{},
}
// skills string'ini bireysel skill'lere ayır
skills := strings.Split(skillsStr, ",")
// TODO: Kodunuzu aşağıya yazın
// slice'taki TÜM skill'ler üzerinde yinelemek için range kullanarak her skill'i işle
// comma ok deyimini kullan: _, exists := skillSet[skill]
// Yeni skill'leri şunu kullanarak ekle: skillSet[skill] = struct{}{}
// Her skill için işleme sonuçlarını görüntüle
// len(skills) kullanarak ilerleme özetini hesapla ve görüntüle
// List all skills in the complete skill set (consider sorting for consistent output)
}Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
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ışlar6Deyimsel Go: Kümeler
Go'da Küme DeyimiBir Küme OluşturmaKümeye Eleman EklemeEleman Varlığını Kontrol EtmeKümeden Eleman SilmeKüme Üzerinde YinelemeÖzet - Benzersiz Kullanıcı AdlarıKendi başına pratik yap: Online Go derleyicisi