CodeBlanks Logo Icon CodeBlanks

Map ile range

range ile map üzerinde döngüyü öğrenirsin.

Map ile range

for k, v := range m map'teki her anahtar-değer çiftini gezer. Sıra tanımlı değildir ve Go bilerek her çalıştırmada karıştırır; bu yüzden sıraya güvenen kod yazılmamalıdır.

notlar := map[string]int{"Ada": 90, "Can": 75}
for ad, not := range notlar {
    fmt.Println(ad, not)  // sıra değişebilir
}

Yalnızca anahtarlar gerekiyorsa for ad := range notlar yazılır.

Sıralı gezinme

Sıralı çıktı gerektiğinde anahtarlar ayrılır ve sıralanır:

anahtarlar := make([]string, 0, len(notlar))
for ad := range notlar {
    anahtarlar = append(anahtarlar, ad)
}
slices.Sort(anahtarlar)
for _, ad := range anahtarlar {
    fmt.Println(ad, notlar[ad])
}

fmt.Println(m) ise map'i her zaman anahtar sırasıyla yazdırır; bu yalnızca yazdırma için yapılan bir kolaylıktır.

Uygulama Sıralı not listesi

notlar := map[string]int{"Can": 75, "Ada": 90, "Ece": 82} tanımla. Anahtarları dilime al, slices.Sort ile sırala ve her satırda ad not yazdır.

Başlangıç kodu

main.go
package main

import (
    "fmt"
    "slices"
)

func main() {
    // buraya yaz
}

Örnek çözüm

main.go
package main

import (
    "fmt"
    "slices"
)

func main() {
    notlar := map[string]int{"Can": 75, "Ada": 90, "Ece": 82}
    anahtarlar := make([]string, 0, len(notlar))
    for ad := range notlar {
        anahtarlar = append(anahtarlar, ad)
    }
    slices.Sort(anahtarlar)
    for _, ad := range anahtarlar {
        fmt.Println(ad, notlar[ad])
    }
}

Beklenen çıktı

Ada 90
Can 75
Ece 82

Soru ve cevaplar

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

1 Map'i anahtarlara göre sıralı yazdırmak için ne yapılır?

  • Anahtarları dilime alıp sıralar, sonra dilimi gezersin Doğru cevap
  • range zaten sıralıdır
  • sort.Map(m) çağrılır
  • Mümkün değildir

Açıklama: Go 1.21+ ile slices.Sorted(maps.Keys(m)) bunu kısaca yapar; daha eski sürümlerde anahtarlar elle toplanıp sort.Strings ile sıralanır.

2 Anahtar ve değer

Soru
for ad, puan := ____ notlar {
    fmt.Println(ad, puan)
}
Cevap
for ad, puan := range notlar {
    fmt.Println(ad, puan)
}

Açıklama: range map'in anahtar ve değerlerini sırayla verir.

3 Kod ve davranış

Kavram Anlamı
for k, v := range m Rastgele sıra
for k := range m Yalnızca anahtarlar
slices.Sort(anahtarlar) Sıralı anahtarlar
fmt.Println(m) Anahtar sırasıyla yazar

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