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)
}Aralık döngüsünde yalnızca bir değişken kullandığımıza dikkat edin. Değerlere (bunların tümü boş yapılardır) ihtiyacımız olmadığından, onları tamamen yok sayabiliriz. Bu, kümenizdeki her rengi satır başına bir tane olacak şekilde yazdırı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.
Görev
KolayŞarkı koleksiyonlarını işleyen ve Go kümesi deyimini kullanarak her çalma listesi hakkında ayrıntılı bilgiler görüntüleyen bir müzik çalma listesi analizcisi oluştur. Bu görev, içeriklerini incelemek ve raporlamak için kümeler üzerinde nasıl yineleme yapılacağını gösterir.
İki girdi alacaksın:
- Virgüllerle ayrılmış rock şarkılarını içeren bir dize (ör.
"Bohemian Rhapsody,Stairway to Heaven,Hotel California,Sweet Child O Mine") - Virgüllerle ayrılmış pop şarkılarını içeren bir dize (ör.
"Shape of You,Blinding Lights,Watermelon Sugar,Levitating")
Görevin:
- Rock şarkılarını ve pop şarkılarını ayrı ayrı depolamak için Go deyimi
map[string]struct{}kullanarak iki küme oluşturmak - Her iki girdi dizesini virgüllerden bölerek tek tek şarkı adlarını elde etmek
- Her şarkıyı, değer olarak boş yapı sabiti
{}kullanarak uygun kümeye eklemek - Rock çalma listesi analizini görüntülemek:
- Başlık:
"Rock Playlist Analysis:" - Sayım:
"Total rock songs: [count]" - Şarkılar başlığı:
"Songs in rock playlist:" - Her şarkıyı ayrı bir satırda görüntülemek:
"♪ [song_title]"
- Başlık:
- Pop çalma listesi analizini görüntülemek:
- Başlık:
"Pop Playlist Analysis:" - Sayım:
"Total pop songs: [count]" - Şarkılar başlığı:
"Songs in pop playlist:" - Her şarkıyı ayrı bir satırda görüntülemek:
"♪ [song_title]"
- Başlık:
- Her iki kümeyi yeni bir kümede birleştirerek birleşik bir çalma listesi oluşturmak
- Birleşik çalma listesi analizini görüntülemek:
- Başlık:
"Combined Playlist Analysis:" - Sayım:
"Total unique songs: [count]" - Şarkılar başlığı:
"All songs in combined playlist:" - Her şarkıyı ayrı bir satırda görüntülemek:
"♫ [song_title]"
- Başlık:
- Son olarak bir özet görüntülemek:
"Playlist Summary:""Rock songs: [rock_count]""Pop songs: [pop_count]""Combined unique songs: [combined_count]"
Girdi dizelerini virgüllerden bölmek için strings paketini kullan. Her küme üzerinde yineleme yapmak için yalnızca anahtarlara (şarkı adlarına) erişmek üzere tek değişkenli for...range döngüsünü kullan. Bu görev, Go kümeleri üzerinde yineleme yapmanın bir koleksiyondaki tüm öğeleri incelemene nasıl olanak tanıdığını gösterir; bu da onu analiz ve raporlama görevleri için ideal kılar.
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ıKendi başına pratik yap: Online Go derleyicisi