Go Programming

Go’da Map İterasyonu Ustalaşmak

Spread the love

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ı

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])
	}
}

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir