Tri d'une Carte de Structs - GOLANG
J'ai une carte de structs que je suis remplissage par diffusion de données à un programme de Go. La façon dont la carte est mise à jour est similaire à l'exemple ci-dessous.
Une fois que j'ai cette carte de structs peuplées, ce qui est la meilleure (ou la bonne) manière de trier cette carte par les valeurs de la count
champ dans la structure?
package main
type data struct {
count int64
}
func main() {
m := make(map[string]data)
m["x"] = data{0, 0}
if xx, ok := m["x"]; ok {
xx.count = 2
m["x"] = xx
} else {
panic("X isn't in the map")
}
}
Cet exemple peut être exécuté ici: http://play.golang.org/p/OawL6QIXuO
- Vous pouvez envisager d'utiliser un B-Arbre ou un rouge-noir arbre pour votre but. Autant que je me souvienne il n'y a pas implémentations de référence dans la bibliothèque, mais ces structures de données ne sont pas difficiles à mettre en œuvre, de toute façon.
Vous devez vous connecter pour publier un commentaire.
Comme siritinga déjà souligné, les éléments d'une
map
n'est pas ordonnée, de sorte que vous ne pouvez pas trier.Ce que vous pouvez faire est de créer un
slice
et trier les éléments à l'aide de lasort
package:De sortie:
Aire de jeux
Modifier
Mise à jour de l'exemple d'utiliser des pointeurs et d'inclure une carte de sorte que vous pouvez à la fois faire des recherches et ont une tranche de trier plus.
for range
de la construction, mais à chaquefor range
obtiendrez les éléments de la carte de manière aléatoire. En gardant un m-longueur de la liste triée va prendre beaucoup de temps. Peut-être vous pouvez utiliser un segment de mémoire à la place?type dataSlice []data
, et ajusté le code pertinent. Cela a fonctionné ainsi.