Sobes.tech
Junior

Denk je dat kaarten (map) in Go gesorteerd zullen zijn?

sobes.tech AI

Antwoord van AI

Standaardmatig garandeert iteratie over een map in Go niet de volgorde van de elementen. De volgorde kan bij elke doorloop veranderen. Dit komt doordat de interne datastructuren voor de map zo zijn geïmplementeerd dat hoge prestaties worden bereikt.

Er zijn echter verschillende manieren om een gesorteerde doorloop te verkrijgen:

  1. Sorteren van de sleutels: Alle sleutels van de map ophalen, sorteren en vervolgens de map doorlopen met behulp van de gesorteerde sleutels.

    // Voorbeeld van sorteren van sleutels
    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) // Sorteer strings, er bestaat ook sort.Ints, etc.
    
    	for _, k := range keys {
    		fmt.Println(k, m[k])
    	}
    }
    
  2. Gebruik maken van datastructuren die volgorde garanderen: Als de volgorde kritisch is, kunnen andere datastructuren worden gebruikt in plaats van maps of een eigen implementatie. Bijvoorbeeld, een lijst van sleutel-waardeparen die in gesorteerde staat wordt gehouden.

Op deze manier zijn standaard maps in Go niet gesorteerd, maar kan de volgorde worden bereikt met aanvullende operaties.