CodeBlanks Logo Icon CodeBlanks

Eleman ekleme

Map'e anahtarla eleman eklemeyi öğrenirsin.

Eleman ekleme ve güncelleme

m[anahtar] = değer anahtar yoksa ekler, varsa değerini günceller. Olmayan anahtarı okumak değer türünün sıfır değerini verir; bu, sayaçlarda çok kullanışlıdır:

sayac := map[string]int{}
for _, k := range []string{"go", "sql", "go"} {
    sayac[k]++
}
fmt.Println(sayac)  // map[go:2 sql:1]

sayac[k]++ ilk görüşte 0'dan başlar, sonra artar.

Struct değerlerini güncellemek

Map değeri bir struct ise alanına doğrudan yazılamaz: m["a"].Adet = 5 derleme hatasıdır. Değeri al, değiştir, geri yaz:

u := stok["kalem"]
u.Adet += 2
stok["kalem"] = u

Alternatif olarak map değeri işaretçi tutulur: map[string]*Urun; o zaman stok["kalem"].Adet += 2 çalışır.

Uygulama Kelime sayacı

strings.Fields("go sql go web go") ile kelimeleri al ve map[string]int ile say. go ve web sayılarını tek satırda yazdır.

Başlangıç kodu

main.go
package main

import (
    "fmt"
    "strings"
)

func main() {
    // buraya yaz
}

Örnek çözüm

main.go
package main

import (
    "fmt"
    "strings"
)

func main() {
    say := map[string]int{}
    for _, k := range strings.Fields("go sql go web go") {
        say[k]++
    }
    fmt.Println(say["go"], say["web"])
}

Beklenen çıktı

3 1

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 <code>m := map[string]int{}</code> için <code>m["yok"]</code> ne döndürür?

  • nil
  • panic
  • -1
  • 0 Doğru cevap

Açıklama: Olmayan anahtar için int'in sıfır değeri döner; anahtarın gerçekten var olup olmadığını anlamak için comma-ok biçimi kullanılır.

2 Sayacı artır

Soru
for _, kelime := range kelimeler {
    say[kelime]____
}
Cevap
for _, kelime := range kelimeler {
    say[kelime]++
}

Açıklama: say[kelime]++ olmayan anahtarı 0'dan başlatıp artırır.

3 İşlem ve sonuç

Kavram Anlamı
m["a"] = 1 (yeni) Ekler
m["a"] = 2 (var) Günceller
m["yok"] Sıfır değer
m["a"]++ Sayaç artırır

Başlangıç bölümündeki tüm dersler