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 (küme) deyimi 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ı takip eder.
Go'da bir küme (set) oluşturmak için, T saklamak istediğiniz öğelerin türü olmak üzere map[T]struct{} desenini kullanarak bir değişken tanımlarsınız. İşte benzersiz renk adlarını saklamak için bir kümeyi nasıl oluşturacağınız:
colors := make(map[string]struct{})Ayrıca eşleme değişmezi (map literal) sözdizimini kullanarak bir kümeyi bazı başlangıç değerleriyle başlatabilirsiniz:
colors := map[string]struct{}{
"red": {},
"blue": {},
"green": {},
}Her bir değerin boş bir struct literal {} olduğuna dikkat edin. Bu, struct{}'ın sıfır değerini (zero value) oluşturur; bu da anahtarın map içinde var olmasına izin verirken hiç bellek alanı kaplamaz.
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.
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
KolayBenzersiz öğeleri depolamak için Go set deyimini (idiom) gösteren bir programlama dili tercihi takipçisi oluşturun. Bu zorluk, kopyalar olmadan programlama dillerini 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 şunları yapmaktır:
- Benzersiz programlama dillerini depolamak için Go deyimi olan
map[string]struct{}kullanarak bir set oluşturun - Girdi dizesini virgüllerden ayırarak tekil dil adlarını elde etmek için ayrıştırın
- Değer olarak boş struct literal
{}kullanarak her dili setinize ekleyin - Her dil ile karşılaşıldığında yazdırarak işlem sonuçlarını görüntüleyin:
- Dil sette yeniyse:
"Added: [language]" - Dil sette zaten mevcutsa:
"Already exists: [language]"
- Dil sette yeniyse:
- Tüm dilleri işledikten sonra bir özet görüntüleyin:
"Total languages processed: [total_count]""Unique languages: [unique_count]"
- Son olarak, setteki tüm benzersiz dilleri listeleyin:
- Başlık:
"Programming languages in set:" - Her dil ayrı bir satırda:
"- [language]"
- Başlık:
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.
Kopya kağıdı
Go'da bir küme (set) oluşturmak için, T'nin öğe türü olduğu map[T]struct{} desenini kullanın:
colors := make(map[string]struct{})Ayrıca map literal sözdizimini kullanarak bir kümeyi başlangıç değerleriyle başlatabilirsiniz:
colors := map[string]struct{}{
"red": {},
"blue": {},
"green": {},
}Her değer, struct{}'ın sıfır değerini oluşturan ve anahtarın map içinde var olmasına izin verirken hiç bellek alanı kaplamayan boş bir struct literalidir {}.
Bir öğenin kümede var olup olmadığını kontrol etmek için "comma ok" deyimini kullanın:
_, exists := languageSet[language]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)
// Diller dizesini virgüllere göre ayır
languages := strings.Split(languagesStr, ",")
// map[string]struct{} yapısını kullanarak bir küme (set) oluştur
languageSet := make(map[string]struct{})
// TODO: Kodunuzu aşağıya yazın
// Her bir dili işleyin ve kümede olup olmadığını kontrol edin
// "comma ok" yapısını kullanın: _, exists := languageSet[language]
// "Added: [language]" veya "Already exists: [language]" yazdırın
// Boş struct literal {} kullanarak dilleri kümeye ekleyin
// Ö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 dilime (slice) dönüştürün ve sıralayın
// Her dili "- [language]" formatında listeleyin
}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ı