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 (set) oluşturduğunuza göre, bir sonraki adım ona nasıl eleman ekleneceğini öğrenmektir. Bir Go kümesi aslında arka planda bir map olduğu için, bir kümeye eleman eklemek, bir map'e anahtar eklemekle aynıdır.
Kümenize bir öğe eklemek için, boş struct değerini yeni bir anahtara atamanız yeterlidir:
colors["yellow"] = struct{}{}struct{}{} söz dizimi boş bir struct literal oluşturur. İlk struct{} türü belirtir ve ikinci {} onu başlatır. Bu, Go'da bir kümeye (set) öğe eklemenin standart yoludur.
Bu yaklaşımın güzelliği, aynı öğeyi tekrar eklemeye çalışırsanız, mevcut girişin üzerine yazarak kümenin benzersizlik özelliğini korumasıdır.
struct{}{} ifadesinin bu atama için tek geçerli sözdizimi olduğunu unutmayın; tür adı olmadan sadece {} yazmak bir derleme hatasına neden olur: missing type in composite literal. Bir map değişmezi (literal) dışındaki bir map anahtarına değer atarken tür her zaman açıkça belirtilmelidir.
Bir kümeye öğe eklemek, Go'nun verimli map uygulamasından yararlanırken benzersiz öğeleri izlemek için size gerçek küme davranışı sunarak hızlı ve basittir.
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Görev
KolayGo set deyimini kullanarak bir geliştiricinin teknik yeteneklerini yöneten bir beceri takip sistemi oluşturun. Bu meydan okuma, bir sete yeni beceriler eklerken kopyaları nasıl önleyeceğinizi ve öğrenme sürecini nasıl takip edeceğinizi gösterir.
İki girdi alacaksınız:
- Beklenen beceri sayısını temsil eden bir dize (örneğin,
"5") - bu sadece referans içindir - Virgülle ayrılmış becerileri içeren bir dize (örneğin,
"Go,Docker,Kubernetes,Go,React,Docker,Python")
Göreviniz şunları yapmaktır:
- Benzersiz teknik becerileri depolamak için Go deyimi olan
map[string]struct{}kullanarak bir set oluşturun - Seti üç başlangıç becerisiyle başlatın:
"Programming","Problem Solving"ve"Communication" - Girdi dizesini virgüllerden ayırarak tekil beceri adlarını elde etmek için ayrıştırın
- Virgülle ayrılmış dizedeki TÜM becerileri işleyin (sayı parametresini kullanmadan tüm dilim üzerinde döngü kurun)
- Girdideki her beceri için, değer olarak
struct{}{}kullanarak setinize ekleyin - Her beceriyi işlendiği sırada yazdırarak işlem sonuçlarını görüntüleyin:
- Eğer beceri sette yeniyse:
"Learning new skill: [skill]" - Eğer beceri sette zaten mevcutsa:
"Already mastered: [skill]"
- Eğer beceri sette yeniyse:
- Tüm becerileri işledikten sonra bir ilerleme özeti görüntüleyin:
"Skills processed: [total_processed]"- beceri diliminin uzunluğunu kullanın"New skills learned: [new_skills_count]""Total skills mastered: [total_unique_skills]"
- Son olarak, geliştiricinin beceri setindeki 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 döngü kurmak için range kullanın, sayı parametresini değil. Sayı referans için verilmiştir ancak döngünüzü kontrol etmemelidir. Girdi dizesini ayırmak için strings paketini kullanın. Bir becerinin eklemeden önce zaten var olup olmadığını kontrol etmek için "comma ok" deyimini kullanın: _, exists := skillSet[skill]. Bu meydan okuma, bir Go setine eleman eklemenin benzersizliği otomatik olarak nasıl yönettiğini ve üyelik testi için nasıl hızlı arama performansı sağladığını gösterir.
Kopya kağıdı
Bir Go kümesine (map[string]struct{} olarak uygulanır) öğe eklemek için, yeni bir anahtara boş bir struct atayın:
colors["yellow"] = struct{}{}struct{}{} söz dizimi boş bir struct literal oluşturur. İlk struct{} türü belirtir ve ikinci {} onu başlatır. Bu, Go'da bir kümeye öğe eklemenin standart yoludur.
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)
// Sayı dizesini tam sayıya dönüştür (sadece referans için - döngüde kullanılmaz)
_, _ = strconv.Atoi(countStr)
// Beceri setini başlangıç becerileriyle başlat
skillSet := map[string]struct{}{
"Programming": struct{}{},
"Problem Solving": struct{}{},
"Communication": struct{}{},
}
// Beceri dizesini tekil becerilere ayır
skills := strings.Split(skillsStr, ",")
// TODO: Kodunuzu aşağıya yazın
// Dilimdeki TÜM beceriler üzerinde gezinmek için range kullanarak her bir beceriyi işleyin
// Comma ok deyimini kullanın: _, exists := skillSet[skill]
// Yeni becerileri şu şekilde ekleyin: skillSet[skill] = struct{}{}
// Her beceri için işlem sonuçlarını görüntüleyin
// len(skills) kullanarak ilerleme özetini hesaplayın ve görüntüleyin
// Tam beceri setindeki tüm becerileri listeleyin (tutarlı çıktı için sıralamayı düşünün)
}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ı