Sobes.tech
Junior

Kas sa arvad, et Go-s kaardid (map) on järjestatud?

sobes.tech AI

Vastus AI-lt

Vaikimisi Go kaardil iteratsioon ei taga elementide järjekorda. Järjekord võib iga läbimise ajal muutuda. See on seotud sellega, kuidas sisemised andmestruktuurid kaardil on rakendatud, et saavutada kõrge jõudlus.

Siiski on mitu viisi, kuidas saada järjestatud läbimine:

  1. Võtmete sorteerimine: Saada kõik kaardi võtmed, sorteerida need ja seejärel läbida kaart kasutades sorteeritud võtmeid.

    // Võtmete sorteerimise näide
    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) // Sorteeri stringid, on ka sort.Ints ja teised.
    
    	for _, k := range keys {
    		fmt.Println(k, m[k])
    	}
    }
    
  2. Andmestruktuuride kasutamine, mis tagavad järjekorra: Kui järjekord on kriitiline, saab kasutada teisi andmestruktuure asemel kaarte või ise rakendada. Näiteks sorteeritud võtme-väärtuse paaride nimekiri, mis hoitakse sorteeritud olekus.

Seega, Go standardkaardid ei ole järjestatud, kuid järjekorda saab saavutada täiendavate operatsioonide abil.