0Pricing
Go Academy · Aula

Iteração e ordenação

Trate a ordem aleatória dos maps

Iteração e ordenação é uma aula grátis de Go Academy no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Go Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Go Academy inclui 4 aulas no total.

Percorrendo um mapa

Use range para percorrer um mapa, obtendo cada chave e valor.

package main

import "fmt"

func main() {
	m := map[string]int{"a": 1, "b": 2}
	for k, v := range m {
		fmt.Println(k, v)
	}
}

A ordem é aleatória

A ordem de iteração dos mapas não é garantida. Go a torna deliberadamente aleatória. Executar o mesmo laço duas vezes pode exibir as chaves em ordens diferentes.

Por que a ordem é aleatorizada

Go aleatoriza a ordem de propósito para que os desenvolvedores não dependam acidentalmente de uma ordem específica. O código que depende da ordem de um mapa está sujeito a apresentar um erro.

Apenas chaves

Omita o valor para percorrer somente as chaves.

package main

import "fmt"

func main() {
	m := map[string]int{"a": 1, "b": 2, "c": 3}
	for k := range m {
		fmt.Println(k)
	}
}

Coletando chaves

Para obter um resultado estável, primeiro colete as chaves em uma fatia.

package main

import "fmt"

func main() {
	m := map[string]int{"a": 1, "b": 2, "c": 3}
	keys := []string{}
	for k := range m {
		keys = append(keys, k)
	}
	fmt.Println("collected", len(keys), "keys")
}

Ordenando as chaves

Ordene as chaves coletadas e depois percorra a fatia. Isso produz uma saída determinística e ordenada.

package main

import (
	"fmt"
	"sort"
)

func main() {
	m := map[string]int{"c": 3, "a": 1, "b": 2}
	keys := []string{}
	for k := range m {
		keys = append(keys, k)
	}
	sort.Strings(keys)
	for _, k := range keys {
		fmt.Println(k, m[k])
	}
}

Padrão de saída ordenada

O padrão de coletar e depois ordenar é a forma padrão de imprimir um mapa em uma ordem previsível. Sempre ordene as chaves quando a ordem da saída for importante.

Ordenando chaves inteiras

A mesma ideia funciona para chaves numéricas com sort.Ints.

package main

import (
	"fmt"
	"sort"
)

func main() {
	m := map[int]string{3: "c", 1: "a", 2: "b"}
	keys := []int{}
	for k := range m {
		keys = append(keys, k)
	}
	sort.Ints(keys)
	for _, k := range keys {
		fmt.Println(k, m[k])
	}
}

Modificando durante a iteração

Você pode excluir chaves com segurança durante um laço de iteração. Porém, adicionar chaves durante a iteração tem comportamento indefinido; as novas entradas podem aparecer ou não.

package main

import "fmt"

func main() {
	m := map[string]int{"a": 1, "b": 2, "c": 3}
	for k := range m {
		if k == "b" {
			delete(m, k)
		}
	}
	fmt.Println(len(m))
}

Ordenando por valor

Para ordenar pelo valor em vez da chave, colete as chaves e depois ordene-as com uma comparação que leia os valores do mapa.

package main

import (
	"fmt"
	"sort"
)

func main() {
	m := map[string]int{"a": 3, "b": 1, "c": 2}
	keys := []string{}
	for k := range m {
		keys = append(keys, k)
	}
	sort.Slice(keys, func(i, j int) bool {
		return m[keys[i]] < m[keys[j]]
	})
	for _, k := range keys {
		fmt.Println(k, m[k])
	}
}

Nunca dependa da ordem

Principal conclusão: nunca presuma a ordem de iteração de um mapa. Se a ordem for importante, extraia as chaves para uma fatia e ordene-as explicitamente.

Verificação rápida

Você precisa imprimir as entradas de um mapa em ordem alfabética de chave. Qual é a abordagem correta?

Recapitulação

Iteração e ordenação:

  • A ordem de range de um mapa é intencionalmente aleatória
  • Colete as chaves, ordene-as e depois percorra-as para obter uma saída determinística
  • Excluir durante range é seguro; adicionar tem comportamento indefinido

Perguntas Frequentes

A aula “Iteração e ordenação” é grátis?

Sim — o texto completo de “Iteração e ordenação” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Go Academy, atualize para CoddyKit PRO. O curso de Go Academy inclui 4 aulas no total.

O que vou aprender em “Iteração e ordenação”?

Trate a ordem aleatória dos maps Você pratica Go Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Go Academy?

Nenhuma experiência prévia é necessária. Go Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.

Quanto tempo leva a aula “Iteração e ordenação”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Go Academy?

Sim. Cada aula de Go Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Funcionamento interno de maps
  2. Verificação de existência
  3. Maps como conjuntos
  4. Iteração e ordenação
← Voltar para Go Academy