Sobes.tech
Junior

Мислиш ли, че картите (map) в Go ще бъдат подредени?

sobes.tech AI

Отговор от AI

По подразбиране, итерацията върху 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 не са сортирани, но редът може да бъде постигнат чрез допълнителни операции.