Ana içeriğe geç
Modül 4 · Ders 3 ders 5Kurstaki 18/50~12 min
Modül dersleri (3/5)

Haritalar: anahtarlar ve değerler

harita bir anahtar→değer karma tablosudur: map[K]V. Haritalar referanstır türler: bir işleve aktarılır, aynı depolamayı paylaşırlar. Onlar olmalı onlara yazmadan önce başlatıldı (make veya değişmez değerle).

Yaratılış

Go
// with a literal
prices := map[string]int{"pane": 2, "latte": 3}

// with make
counters := make(map[string]int)
counters["a"] = 1

// nil map (readable, NOT writable)
var m map[string]int
fmt.Println(m["x"])    // 0 — ok
// m["y"] = 1          // PANIC

Temel işlemler

Go
m := map[string]int{"a": 1}

m["b"] = 2              // insert/update
v := m["a"]             // get; if missing: zero value
delete(m, "a")          // remove (ok even if the key doesn't exist)
n := len(m)             // number of entries

Virgül-tamam: "eksik"i "sıfır değer"den ayırma

Go
v, ok := m["x"]
if !ok {
    fmt.Println("key missing")
} else {
    fmt.Println("found:", v)
}

Bir anahtarın var olup olmadığını bilmenin tek yolu budur çünkü m["x"] şunu döndürür: anahtar orada olmadığında bile sıfır değeri. Temel bir model.

Yineleme: rastgele sıra

Go
for k, v := range m {
    fmt.Println(k, v)
}

Anahtarlar: yalnızca karşılaştırılabilir türler

Anahtarlar karşılaştırılabilir olmalıdır: string, sayılar, bool, işaretçiler, kanallar, arayüzler, karşılaştırılabilir türden diziler, karşılaştırılabilir yapılar alanlar. Dilimler, haritalar ve işlevler karşılaştırılamaz → karşılaştırılamazlar anahtar olun.

Go
m := map[[2]int]string{}   // ok: array is comparable
// m := map[[]int]string{} // ERROR: slice is not comparable

Desen: sayaçlar

Haritaların en yaygın kullanımlarından biri:

Go
words := []string{"a", "b", "a", "c", "b", "a"}
freq := map[string]int{}
for _, w := range words {
    freq[w]++   // access to a missing key is 0 → 0+1 = 1
}
// freq = {"a": 3, "b": 2, "c": 1}

Deneyin

Egzersiz#go.m4.l3.e1
Denemeler: 0Yükleniyor…

'a' -> 1 ve 'b' -> 2 değerlerine sahip bir harita[string]int oluşturun, ardından 'c' -> 3'ü ekleyin.

Düzenleyici yükleniyor…
İpucu göster

Değişmez: `map[K]V{"anahtar": değer, ...}`.

3 denemeden sonra çözüm mevcut

Egzersiz#go.m4.l3.e2
Denemeler: 0Yükleniyor…

'x' anahtarını (mevcut değil) v'ye okumak için virgül-ok desenini kullanın, tamam ve her ikisini de yazdırın.

Düzenleyici yükleniyor…
İpucu göster

İki dönüş değeri: değer ve durum boolean'ı.

3 denemeden sonra çözüm mevcut

Quiz#go.m4.l3.e3
Hazır

Sıfır bir haritaya yazarken ne olur?

Go
var m map[string]int
m["a"] = 1
Cevap seçenekleri

Özet

  • map[K]V: anahtar/değer çifti, referans, karma destekli.
  • make veya bir değişmez değerle başlatın; sıfır harita → yazarken panik.
  • v, ok := m[k] "eksik" değerini "sıfır değer"den ayırmanın tek yoludur.
  • delete(m, k) kaldırır; k mevcut olmasa bile tamam.
  • range yineleme: rastgele sıra.
  • Tuşlar: yalnızca karşılaştırılabilir türler (dilim/harita/işlev yok).
  • Sayaç modeli: freq[k]++ örtülü sıfır değerinden yararlanır.