Sobes.tech
Junior

Achas que os mapas em Go serão ordenados?

sobes.tech IA

Resposta da IA

Por padrão, a iteração sobre um mapa em Go não garante a ordem dos elementos. A ordem pode mudar a cada percurso. Isso ocorre devido à forma como as estruturas de dados internas para o mapa são implementadas, para alcançar alta performance.

No entanto, existem várias maneiras de obter uma travessia ordenada:

  1. Ordenar as chaves: Obter todas as chaves do mapa, ordená-las e depois percorrer o mapa usando as chaves ordenadas.

    // Exemplo de ordenação de chaves
    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) // Ordenar strings, também existe sort.Ints, etc.
    
    	for _, k := range keys {
    		fmt.Println(k, m[k])
    	}
    }
    
  2. Usar estruturas de dados que garantem a ordem: Se a ordem for crítica, pode-se usar outras estruturas de dados em vez de mapas ou implementar a sua própria. Por exemplo, uma lista de pares chave-valor que é mantida em estado ordenado.

Assim, mapas padrão em Go não são ordenados, mas a ordem pode ser alcançada com operações adicionais.