Küme Üzerinde Yineleme
Coddy'nin GO Journey'sinin Mantık ve Akış bölümünün bir parçası — ders 36 / 68.
Artık kümenize eleman ekleyebildiğinize, kontrol edebildiğinize ve silebildiğinize göre, tüm elemanlar arasında nasıl gezineceğinizi öğrenmenin zamanı geldi. Go kümeniz bir map üzerine inşa edildiği için, her bir elemana erişmek için aşina olduğunuz for...range döngüsünü kullanabilirsiniz.
Bir set üzerinde yineleme yapmak için, bir map üzerinde yineleme yapmakla aynı sözdizimini kullanırsınız, ancak sadece anahtarlarla ilgilenirsiniz:
for color := range colors {
fmt.Println(color)
}range döngüsünde yalnızca bir değişken kullandığımıza dikkat edin. Değerlere (hepsi boş struct'lar olduğu için) ihtiyacımız olmadığından, onları tamamen görmezden gelebiliriz. Bu, kümenizdeki her bir rengi her satıra bir tane gelecek şekilde yazdıracaktır.
Değeri yok sayma konusunda açık olmayı tercih ederseniz, iki değişkenli formu da kullanabilirsiniz:
for color, _ := range colors {
fmt.Println(color)
}Go'daki map'lerin yineleme sırasında belirli bir sırayı garanti etmediğini unutmayın; bu nedenle programı her çalıştırdığınızda küme (set) öğeleriniz farklı bir sırada yazdırılabilir. Bu, kümeler için tamamen normal bir davranıştır, çünkü kümeler sıra korumaktan ziyade üyelik testi için tasarlanmıştır.
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
KolayŞarkı koleksiyonlarını işleyen ve Go set deyimini kullanarak her bir çalma listesi hakkında ayrıntılı bilgi görüntüleyen bir müzik çalma listesi analizörü oluşturun. Bu zorluk, içeriklerini incelemek ve raporlamak için setler üzerinde nasıl yineleme yapılacağını gösterir.
İki girdi alacaksınız:
- Virgülle ayrılmış rock şarkılarını içeren bir dize (örneğin,
"Bohemian Rhapsody,Stairway to Heaven,Hotel California,Sweet Child O Mine") - Virgülle ayrılmış pop şarkılarını içeren bir dize (örneğin,
"Shape of You,Blinding Lights,Watermelon Sugar,Levitating")
Göreviniz şunları yapmaktır:
- Rock şarkılarını ve pop şarkılarını ayrı ayrı saklamak için Go deyimi olan
map[string]struct{}yapısını kullanarak iki set oluşturun - Bireysel şarkı başlıklarını elde etmek için her iki girdi dizesini virgüllere göre ayırarak ayrıştırın
- Değer olarak boş struct literal
{}kullanarak her şarkıyı uygun sete ekleyin - Rock çalma listesi analizini görüntüleyin:
- Başlık:
"Rock Playlist Analysis:" - Sayı:
"Total rock songs: [count]" - Şarkı başlığı:
"Songs in rock playlist:" - Her şarkı ayrı bir satırda:
"♪ [song_title]"
- Başlık:
- Pop çalma listesi analizini görüntüleyin:
- Başlık:
"Pop Playlist Analysis:" - Sayı:
"Total pop songs: [count]" - Şarkı başlığı:
"Songs in pop playlist:" - Her şarkı ayrı bir satırda:
"♪ [song_title]"
- Başlık:
- Her iki seti yeni bir sette birleştirerek birleşik bir çalma listesi oluşturun
- Birleşik çalma listesi analizini görüntüleyin:
- Başlık:
"Combined Playlist Analysis:" - Sayı:
"Total unique songs: [count]" - Şarkı başlığı:
"All songs in combined playlist:" - Her şarkı ayrı bir satırda:
"♫ [song_title]"
- Başlık:
- Son olarak, bir özet görüntüleyin:
"Playlist Summary:""Rock songs: [rock_count]""Pop songs: [pop_count]""Combined unique songs: [combined_count]"
Girdi dizelerini virgüllere göre ayırmak için strings paketini kullanın. Her bir set üzerinde yineleme yapmak için, yalnızca anahtarlara (şarkı başlıkları) erişmek üzere tek bir değişkenle for...range döngüsünü kullanın. Bu zorluk, Go setleri üzerinde yineleme yapmanın bir koleksiyondaki tüm öğeleri incelemenize nasıl olanak tanıdığını göstererek, analiz ve raporlama görevleri için mükemmel hale getirir.
Kopya kağıdı
Go'da bir küme (set) üzerinde döngü kurmak için, yalnızca anahtarlara erişmek için tek bir değişkenle for...range döngüsünü kullanın:
for color := range colors {
fmt.Println(color)
}Ayrıca iki değişkenli formu kullanabilir ve değeri açıkça görmezden gelebilirsiniz:
for color, _ := range colors {
fmt.Println(color)
}Go'daki map'lerin döngü sırasında belirli bir sırayı garanti etmediğini unutmayın; bu nedenle küme öğeleri programı her çalıştırdığınızda farklı sıralarda görünebilir.
Kendin dene
package main
import (
"bufio"
"fmt"
"os"
"sort"
"strings"
)
func main() {
// bufio.Scanner kullanarak tam satırları oku (boşluk içeren şarkı adlarını işler)
scanner := bufio.NewScanner(os.Stdin)
scanner.Scan()
rockSongs := scanner.Text()
scanner.Scan()
popSongs := scanner.Text()
// Go deyimi olan map[string]struct{} kullanarak kümeler oluştur
rockSet := make(map[string]struct{})
popSet := make(map[string]struct{})
// Giriş dizelerini ayrıştır ve kümeleri doldur
rockList := strings.Split(rockSongs, ",")
popList := strings.Split(popSongs, ",")
// TODO: Kodunuzu aşağıya yazın
// Şarkıları ilgili kümelerine ekleyin
// Rock çalma listesi analizini görüntüleyin (tutarlı çıktı için şarkıları sıralayın)
// Pop çalma listesi analizini görüntüleyin (tutarlı çıktı için şarkıları sıralayın)
// Birleştirilmiş çalma listesi analizini oluşturun ve görüntüleyin (tutarlı çıktı için şarkıları sıralayın)
// Çalma listesi özetini görüntüleyin
// Unutmayın: Tutarlı sıralama için map anahtarlarını dilime (slice) dönüştürün, sıralayın ve ardından üzerinde dönün
_ = rockSet
_ = popSet
_ = rockList
_ = popList
_ = fmt.Sprintf
_ = sort.Strings
}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ı