Go’nun haritaları (map’ler), anahtar-değer çiftlerini saklamak için temel bir veri yapısıdır. Bu çiftler üzerinde verimli bir şekilde yineleme yapmak, birçok uygulama için çok önemlidir. Bu makale, en iyi uygulamaları ve yaygın tuzakları vurgulayarak, haritalarla çalışmaya, oluşturmadan dolaşıma kadar eksiksiz bir kılavuz sağlar.
İçindekiler
- Haritaların Bildirilmesi ve Başlatılması
- Haritalar Üzerinde Yineleme
- Anahtarlar ve Değerler Üzerinde Seçici Olarak Yineleme
- Yineleme Sırasında Sırayı Koruma
Haritaların Bildirilmesi ve Başlatılması
Go haritaları, make()
fonksiyonu veya bir bileşik literal kullanılarak bildirilir. make()
, büyük haritalar için performansı artıran başlangıç kapasitesinin belirlenmesine olanak tanır. Bileşik literaller, daha küçük, statik olarak tanımlanmış haritalar için daha özlüdür.
package main
import "fmt"
func main() {
// make() kullanarak
myMap := make(map[string]int, 10) // 10 başlangıç kapasitesi
myMap["apple"] = 1
myMap["banana"] = 2
myMap["cherry"] = 3
// Bileşik literal kullanarak
anotherMap := map[string]int{
"apple": 1,
"banana": 2,
"cherry": 3,
}
fmt.Println("myMap:", myMap)
fmt.Println("anotherMap:", anotherMap)
}
Haritalar Üzerinde Yineleme
Bir Go haritası üzerinde yinelemenin standart yolu, for...range
döngüsünü kullanmaktır. Önemli olarak, yineleme sırası garanti edilmez ve çalıştırmalar arasında değişebilir. Program mantığınız için belirli bir sıraya güvenmeyin.
package main
import "fmt"
func main() {
myMap := map[string]int{
"apple": 1,
"banana": 2,
"cherry": 3,
}
for key, value := range myMap {
fmt.Printf("Anahtar: %s, Değer: %dn", key, value)
}
}
Anahtarlar ve Değerler Üzerinde Seçici Olarak Yineleme
Gerekirse, istenmeyen öğeyi yok saymak için boş tanımlayıcı _
‘yı kullanarak yalnızca anahtarlar veya değerler üzerinde yinelemeyi seçebilirsiniz:
// Yalnızca anahtarlar üzerinde yineleme
for key := range myMap {
fmt.Println("Anahtar:", key)
}
// Yalnızca değerler üzerinde yineleme
for _, value := range myMap {
fmt.Println("Değer:", value)
}
Yineleme Sırasında Sırayı Koruma
Belirli bir yineleme sırası gerekiyorsa, sıralanmış bir veri yapısı kullanmanız gerekir. Bir yaklaşım, anahtarların bir dilimini kullanmak, sıralamak ve ardından dilim boyunca yineleyerek haritadan karşılık gelen değerlere erişmektir:
package main
import (
"fmt"
"sort"
)
func main() {
myMap := map[string]int{
"apple": 1,
"banana": 2,
"cherry": 3,
}
keys := make([]string, 0, len(myMap))
for k := range myMap {
keys = append(keys, k)
}
sort.Strings(keys)
for _, k := range keys {
fmt.Printf("Anahtar: %s, Değer: %dn", k, myMap[k])
}
}