Sobes.tech
Junior

Czy uważasz, że mapy w Go będą uporządkowane?

sobes.tech AI

Odpowiedź od AI

Domyślnie iteracja po mapie w Go nie gwarantuje kolejności elementów. Kolejność może się zmieniać przy każdym przebiegu. Wynika to z tego, jak zaimplementowane są wewnętrzne struktury danych dla mapy, aby osiągnąć wysoką wydajność.

Jednak istnieje kilka sposobów na uzyskanie uporządkowanego przejścia:

  1. Sortowanie kluczy: Uzyskać wszystkie klucze mapy, posortować je, a następnie przejść po mapie, używając posortowanych kluczy.

    // Przykład sortowania kluczy
    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) // Sortowanie stringów, jest też sort.Ints itd.
    
    	for _, k := range keys {
    		fmt.Println(k, m[k])
    	}
    }
    
  2. Użycie struktur danych gwarantujących kolejność: Jeśli kolejność jest krytyczna, można użyć innych struktur danych zamiast map lub zaimplementować własną. Na przykład, lista par klucz-wartość, która jest utrzymywana w stanie posortowanym.

W ten sposób, standardowe mapy w Go nie są uporządkowane, ale można osiągnąć kolejność za pomocą dodatkowych operacji.