Menu
Coddy logo textTech

Bir Küme Oluşturma

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

Go'nun set deyiminin arkasındaki kavramı anladığınıza göre, ilk setinizi oluşturarak bunu uygulamaya koymanın zamanı geldi. Süreç oldukça basittir ve map'lerle zaten öğrenmiş olduğunuz aynı kalıpları izler.

Go'da bir küme (set) oluşturmak için, map[T]struct{} desenini kullanarak bir değişken tanımlarsınız; burada T, saklamak istediğiniz öğelerin türüdür. Benzersiz renk adlarını saklamak için bir kümeyi şu şekilde oluşturabilirsiniz:

colors := make(map[string]struct{})

Ayrıca map literal sözdizimini kullanarak bir set'i bazı başlangıç değerleriyle başlatabilirsiniz.

colors := map[string]struct{}{
    "red":   {},
    "blue":  {},
    "green": {},
}

Her bir değerin nasıl boş bir struct literal'ı {} olduğuna dikkat edin. Bu, anahtarın map içinde var olmasına izin vermeye devam ederken hiç bellek alanı kaplamayan struct{}'ın sıfır değerini (zero value) oluşturur.

Bu yaklaşımın güzelliği, Go'nun mevcut map altyapısından yararlanırken gerçek set semantiği sağlamasıdır; her renk adı yalnızca bir kez görünebilir ve tıpkı normal map'lerde olduğu gibi hızlı arama süreleri elde edersiniz.

challenge icon

Görev

Kolay

Benzersiz öğeleri depolamak için Go set deyimini (idiom) gösteren bir programlama dili tercihi takipçisi oluşturun. Bu zorluk, programlama dillerini kopyalar olmadan takip etmek için map[string]struct{} deseninin nasıl kullanılacağını gösterir.

İki girdi alacaksınız:

  • İşlenecek dillerin sayısını temsil eden bir dize (örneğin, "6")
  • Virgülle ayrılmış programlama dillerini içeren bir dize (örneğin, "Go,Python,JavaScript,Go,Java,Python,C++,JavaScript")

Göreviniz şunlardır:

  1. Benzersiz programlama dillerini depolamak için Go deyimi olan map[string]struct{} kullanarak bir set oluşturun
  2. Girdi dizesini virgüllerden ayırarak tekil dil adlarını elde etmek için ayrıştırın
  3. Değer olarak boş struct literal {} kullanarak her dili setinize ekleyin
  4. Her dili karşılaşıldığı anda yazdırarak işlem sonuçlarını görüntüleyin:
    • Dil sete yeniyse: "Added: [language]"
    • Dil sette zaten mevcutsa: "Already exists: [language]"
  5. Tüm dilleri işledikten sonra bir özet görüntüleyin:
    • "Total languages processed: [total_count]"
    • "Unique languages: [unique_count]"
  6. Son olarak, setteki tüm benzersiz dilleri listeleyin:
    • Başlık: "Programming languages in set:"
    • Her dil ayrı bir satırda: "- [language]"

Girdi dizesini bölmek için strings paketini ve sayı dizesini bir tam sayıya dönüştürmek için strconv paketini kullanın. Bir dili eklemeden önce sette zaten var olup olmadığını kontrol etmek için "comma ok" deyimini kullanın: _, exists := languageSet[language]. Bu zorluk, Go set deyiminin benzersiz öğeleri takip etmek ve verilerinizdeki kopyaları önlemek için nasıl verimli bir yol sağladığını gösterir.

Kendin dene

package main

import (
	"fmt"
	"sort"
	"strconv"
	"strings"
)

func main() {
	// Girdiyi oku
	var countStr string
	var languagesStr string
	fmt.Scanln(&countStr)
	fmt.Scanln(&languagesStr)
	
	// Sayı dizesini tam sayıya dönüştür (bu görev için gerekli değil)
	_, _ = strconv.Atoi(countStr)
	
	// Dilleri virgüllere göre ayır
	languages := strings.Split(languagesStr, ",")
	
	// map[string]struct{} deyimini kullanarak bir küme (set) oluştur
	languageSet := make(map[string]struct{})
	
	// TODO: Kodunuzu aşağıya yazın
	// Her bir dili işle ve kümede olup olmadığını kontrol et
	// comma ok deyimini kullan: _, exists := languageSet[language]
	// "Added: [language]" veya "Already exists: [language]" yazdır
	// Boş struct literal {} kullanarak dilleri kümeye ekle
	
	// Özet bilgileri yazdır
	// İşlenen toplam dil sayısını ve benzersiz dil sayısını yazdır
	
	// Kümedeki tüm benzersiz dilleri yazdır
	fmt.Println("Programming languages in set:")
	// Tutarlı çıktı için map'i slice'a dönüştürün ve sıralayın
	// Her bir dili "- [language]" formatıyla listeleyin
}
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