Sobes.tech
Junior

Da li misliš da će mape (map) u Go biti sortirane?

sobes.tech АИ

Одговор од АИ

По подразумеванию, итерация по map у Go не гарантује редослед елемената. Редослед може да се мења при сваком проласку. То је због начина на који су имплементиране унутрашње структуре података за map, како би се постигла висока перформанса.

Међутим, постоји неколико начина да се добије сортирани пролаз:

  1. Сортирање кључева: Добити све кључеве map-а, сортирати их и затим пролазити кроз map користећи сортиране кључеве.

    // Пример сортирања кључева
    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) // Сортирање стрингова, постоји и sort.Ints, итд.
    
    	for _, k := range keys {
    		fmt.Println(k, m[k])
    	}
    }
    
  2. Користите структуре података које гарантују редослед: Ако је редослед критичан, можете користити друге структуре података уместо map-ова или реализовати своју. На пример, листа парова кључ-вредност која се одржава у сортираном стању.

Тако, стандардне map-ове у Go-у нису сортиране, али редослед може бити постигнут помоћу додатних операција.