Menu
Coddy logo textTech

Kümeye Eleman Ekleme

Coddy'nin GO Journey'sinin Mantık ve Akış bölümünün bir parçası — ders 33 / 68.

Bir küme 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.

Şuna dikkat edin: struct{}{} bu atama için tek geçerli sözdizimidir; tür adı olmadan sadece {} yazmak bir derleme hatasına neden olur: missing type in composite literal. Bir map literal'ı dışındaki bir map anahtarına değer atarken tür her zaman açıkça belirtilmelidir.

Bir kümeye (set) öğ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.

challenge icon

Görev

Kolay

Go 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:

  1. Benzersiz teknik becerileri saklamak için Go deyimi olan map[string]struct{} kullanarak bir set oluşturun
  2. Seti üç başlangıç becerisiyle başlatın: "Programming", "Problem Solving" ve "Communication"
  3. Girdi dizesini virgüllerden ayırarak bireysel beceri adlarını elde etmek için ayrıştırın
  4. Virgülle ayrılmış dizedeki TÜM becerileri işleyin (sayı parametresini kullanmadan tüm dilim üzerinde yineleme yapın)
  5. Girdideki her beceri için, değer olarak struct{}{} kullanarak setinize ekleyin
  6. İşleme sonuçlarını, her beceri işlendikçe yazdırarak görüntüleyin:
    • Eğer beceri sette yeniyse: "Learning new skill: [skill]"
    • Eğer beceri sette zaten mevcutsa: "Already mastered: [skill]"
  7. 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]"
  8. Son olarak, geliştiricinin beceri setindeki tüm becerileri listeleyin:
    • Başlık: "Complete skill set:"
    • Her beceri ayrı bir satırda: "✓ [skill]"

Önemli: Dilimdeki tüm beceriler üzerinde yineleme yapmak 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 eklenmeden ö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 hızlı arama performansı sağladığını 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)
	
	// Sayı dizesini tam sayıya dönüştür (yalnızca referans içindir - 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
	// Slice içindeki TÜM beceriler üzerinde yineleme yapmak için range kullanarak her bir beceriyi işle
	// comma ok deyimini kullanın: _, exists := skillSet[skill]
	// Şunu kullanarak yeni beceriler ekleyin: skillSet[skill] = struct{}{}
	// Her beceri için işlem sonuçlarını görüntüle
	// len(skills) kullanarak ilerleme özetini hesapla ve görüntüle
	// Tam beceri setindeki tüm becerileri listele (tutarlı çıktı için sıralamayı düşünün)
	
}
quiz iconKendini test et

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