Map ile range
- Go kursu
- Başlangıç
- Ders 55/90
- 4 dk
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
package main
import (
"fmt"
"slices"
)
func main() {
// buraya yaz
}Örnek çözüm
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
for ad, puan := ____ notlar {
fmt.Println(ad, puan)
}
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 |