Map'te arama
- Go kursu
- Başlangıç
- Ders 53/90
- 4 dk
Map'ten anahtarla değer almayı ve varlık kontrolünü öğrenirsin.
Map'te arama: comma-ok
Bir anahtarın gerçekten var olup olmadığını anlamak için iki değerli okuma kullanılır:
fiyat := map[string]float64{"kalem": 12.5, "hediye": 0}
if f, ok := fiyat["hediye"]; ok {
fmt.Println("var:", f) // var: 0
}
if _, ok := fiyat["silgi"]; !ok {
fmt.Println("silgi yok")
}Yalnızca fiyat["hediye"] okusaydın 0'ın "bedava" mı yoksa "yok" mu olduğunu ayırt edemezdin.
Küme olarak map
Go'da ayrı bir küme türü yoktur; map[T]bool ya da bellek açısından daha iyi olan map[T]struct{} kullanılır:
gorulen := map[string]bool{}
for _, ad := range []string{"ada", "can", "ada"} {
if gorulen[ad] {
fmt.Println("tekrar:", ad)
continue
}
gorulen[ad] = true
}map[T]bool ile olmayan anahtar false döndüğü için comma-ok gerekmez.
Uygulama Fiyat sorgusu
fiyatSor(m map[string]float64, ad string) string yaz: ürün varsa fmt.Sprintf("%s: %.2f", ad, f), yoksa ad + " bulunamadı" döndürsün. "kalem" ve "silgi" için sonuçları yazdır.
Başlangıç kodu
package main
import "fmt"
func main() {
// buraya yaz
}Örnek çözüm
package main
import "fmt"
func fiyatSor(m map[string]float64, ad string) string {
if f, ok := m[ad]; ok {
return fmt.Sprintf("%s: %.2f", ad, f)
}
return ad + " bulunamadı"
}
func main() {
m := map[string]float64{"kalem": 12.5}
fmt.Println(fiyatSor(m, "kalem"))
fmt.Println(fiyatSor(m, "silgi"))
}Beklenen çıktı
kalem: 12.50 silgi bulunamadı
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 <code>v, ok := m[k]</code> ifadesinde anahtar yoksa ne döner?
- panic
- Son değer ve true
- Sıfır değer ve false Doğru cevap
- nil ve error
Açıklama: ok yalnızca anahtar varsa true olur; v ise yoksa değer türünün sıfır değeridir.
2 Varlık kontrolü
if _, ____ := stok["kalem"]; !ok {
fmt.Println("stokta yok")
}
if _, ok := stok["kalem"]; !ok {
fmt.Println("stokta yok")
}
Açıklama: İkinci değer anahtarın map'te olup olmadığını bildiren bool'dur.
3 Okuma ve sonuç
| Kavram | Anlamı |
|---|---|
m["var"] |
Değer |
m["yok"] |
Sıfır değer |
_, ok := m["yok"] |
ok = false |
map[string]bool |
Küme |