Meydan okuma 2 - Veri yapısı
- Go kursu
- Başlangıç
- Ders 88/90
- 8 dk
Struct ve slice ile bir rehber uygulaması yazarsın.
Meydan okuma: kitaplık
Struct, dilim ve append kullanarak küçük bir kitaplık yöneticisi yazacaksın. Kitaplik türü kitapları bir dilimde tutar; Ekle(baslik string, sayfa int) yeni kitap ekler, Uzunlar(min int) []string en az min sayfalık kitapların başlıklarını döndürür.
var k Kitaplik
k.Ekle("Dune", 412)
k.Ekle("Simyacı", 184)
k.Ekle("Vakıf", 255)
fmt.Println(k.Uzunlar(250)) // [Dune Vakıf]Plan
1) type Kitap struct { Title string; Sayfa int }. 2) type Kitaplik struct { kitaplar []Kitap }. 3) func (k *Kitaplik) Ekle(...): k.kitaplar = append(k.kitaplar, Kitap{...}). 4) Uzunlar: boş bir []string oluştur, kitapları gez, koşulu sağlayanların başlığını ekle ve döndür.
Uygulama Kitaplık yöneticisi
Plana göre Kitap, Kitaplik, Ekle ve Uzunlar'ı yaz. Üç kitabı ekleyip k.Uzunlar(250) sonucunu yazdır.
Başlangıç kodu
package main
import "fmt"
func main() {
// buraya yaz
}Örnek çözüm
package main
import "fmt"
type Kitap struct {
Title string
Sayfa int
}
type Kitaplik struct {
kitaplar []Kitap
}
func (k *Kitaplik) Ekle(title string, sayfa int) {
k.kitaplar = append(k.kitaplar, Kitap{title, sayfa})
}
func (k *Kitaplik) Uzunlar(min int) []string {
var sonuc []string
for _, b := range k.kitaplar {
if b.Sayfa >= min {
sonuc = append(sonuc, b.Title)
}
}
return sonuc
}
func main() {
var k Kitaplik
k.Ekle("Dune", 412)
k.Ekle("Simyacı", 184)
k.Ekle("Vakıf", 255)
fmt.Println(k.Uzunlar(250))
}Beklenen çıktı
[Dune Vakıf]
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 <code>Ekle</code> ve <code>Uzunlar</code> hangi alıcıları kullanmalıdır?
- İkisi de değer alıcı
- İkisi de fonksiyon olmalı
- Fark etmez
- Ekle *Kitaplik (değiştirir), Uzunlar Kitaplik ya da *Kitaplik (okur) Doğru cevap
Açıklama: Ekle dilimi büyüttüğü için işaretçi alıcı şarttır; tutarlılık için genellikle hepsi işaretçi alıcıyla yazılır.
2 Kitap ekle
func (k *Kitaplik) Ekle(title string, sayfa int) {
k.kitaplar = ____(k.kitaplar, Kitap{title, sayfa})
}
func (k *Kitaplik) Ekle(title string, sayfa int) {
k.kitaplar = append(k.kitaplar, Kitap{title, sayfa})
}
Açıklama: append yeni kitabı dilime ekler; sonuç alana geri atanır.
3 Parça ve görev
| Kavram | Anlamı |
|---|---|
Kitap |
Tek kayıt |
Kitaplik |
Kayıt koleksiyonu |
Ekle |
append ile büyütür |
Uzunlar |
Filtreler |