Trier un type de carte dans Go

L'une des particularités d'une carte Go est que les champs retournent dans un ordre aléatoire.

Si vous exécutez cet exemple simple:

package main

import ( “fmt” )

func main() { ages := map[string]int{ “a”: 1, “c”: 3, “d”: 4, “b”: 2, }

<span style="color:#a6e22e">fmt</span>.<span style="color:#a6e22e">Println</span>(<span style="color:#a6e22e">ages</span>)
<span style="color:#a6e22e">fmt</span>.<span style="color:#a6e22e">Println</span>(<span style="color:#a6e22e">ages</span>)
<span style="color:#a6e22e">fmt</span>.<span style="color:#a6e22e">Println</span>(<span style="color:#a6e22e">ages</span>)

}

jouer

la sortie sera

map[b:2 a:1 c:3 d:4]
map[c:3 d:4 b:2 a:1]
map[d:4 b:2 a:1 c:3]

C'est exprès, pour éviter de dépendre de l'ordre des éléments, car différentes implémentations du compilateur peuvent utiliser différentes fonctions de hachage. C'est l'une de ces choses qui rendent Go très explicite pour éviter de provoquer des hypothèses invalides.

Et si vous souhaitez commander une carte par clé?

package main

import ( “fmt” “sort” )

func main() { ages := map[string]int{ “a”: 1, “c”: 3, “d”: 4, “b”: 2, }

<span style="color:#a6e22e">names</span> <span style="color:#f92672">:=</span> make([]<span style="color:#66d9ef">string</span>, <span style="color:#ae81ff">0</span>, len(<span style="color:#a6e22e">ages</span>))

<span style="color:#66d9ef">for</span> <span style="color:#a6e22e">name</span> <span style="color:#f92672">:=</span> <span style="color:#66d9ef">range</span> <span style="color:#a6e22e">ages</span> {
	<span style="color:#a6e22e">names</span> = append(<span style="color:#a6e22e">names</span>, <span style="color:#a6e22e">name</span>)
}

<span style="color:#a6e22e">sort</span>.<span style="color:#a6e22e">Strings</span>(<span style="color:#a6e22e">names</span>) <span style="color:#75715e">//sort keys alphabetically

for _, name := range names { fmt.Println(ages[name]) }

}

jouer

Ce programme imprimera les valeurs de la carte, triées par clé:

1
2
3
4

Plus de tutoriels go: