Sobes.tech
Junior

Go'daki haritaların (map) sıralı olacağını düşünüyor musun?

sobes.tech yapay zeka

AI'dan gelen yanıt

Varsayılan olarak, Go'da map üzerinde yineleme, öğelerin sırasını garanti etmez. Sıra, her geçişte değişebilir. Bu, map için dahili veri yapıların nasıl uygulandığıyla ilgilidir ve yüksek performans sağlamak içindir.

Ancak, sıralı bir geçiş elde etmek için birkaç yöntem vardır:

  1. Anahtarları sıralama: Map'teki tüm anahtarları alın, sıralayın ve ardından sıralı anahtarları kullanarak map üzerinde geçiş yapın.

    // Anahtarların sıralanması örneği
    package main
    
    import (
    	"fmt"
    	"sort"
    )
    
    func main() {
    	m := map[string]int{
    		"b": 2,
    		"a": 1,
    		"c": 3,
    	}
    
    	keys := make([]string, 0, len(m))
    	for k := range m {
    		keys = append(keys, k)
    	}
    	sort.Strings(keys) // Stringleri sıralama, sort.Ints de var.
    
    	for _, k := range keys {
    		fmt.Println(k, m[k])
    	}
    }
    
  2. Sıralamayı garanti eden veri yapıları kullanma: Sıralama kritik ise, map yerine başka veri yapıları kullanabilir veya kendi yapınızı oluşturabilirsiniz. Örneğin, sıralı durumda tutulan anahtar-değer çiftleri listesi.

Bu şekilde, Go'daki standart mapler sıralı değildir, ancak ek işlemlerle sıralama sağlanabilir.