104 votes

Comment trier une Map[string]int par ses valeurs ?

Étant donné ce bloc de code

map[string]int {"hello":10, "foo":20, "bar":20}

Je voudrais imprimer

foo, 20
bar, 20
hello, 10

Dans l'ordre du plus haut au plus bas

0voto

Steven Penny Points 18523

Dans mon cas, il s'agissait d'un programme que j'avais créé. Dans ce programme, j'ai créé une Map comme vous, avec string y int . Puis j'ai découvert comme vous que Go n'a pas vraiment de moyen intégré pour trier quelque chose comme ça. J'ai lu les autres réponses et je n'ai pas vraiment aimé ce que j'ai lu.

J'ai donc essayé d'envisager le problème différemment. Go peut utiliser trier.Ints avec une tranche. Aussi, Go peut utiliser Trier.Trancher avec un comparateur personnalisé. Ainsi, au lieu de créer une carte de string y int J'ai créé un struct de string y int . Ensuite, vous pouvez trier :

package main

import (
   "fmt"
   "sort"
)

type file struct {
   name string
   size int
}

func main() {
   a := []file{
      {"april.txt", 9}, {"may.txt", 7},
   }
   sort.Slice(a, func (d, e int) bool {
      return a[d].size < a[e].size
   })
   fmt.Println(a)
}

Cela ne conviendra pas à tout le monde, car vous serez peut-être contraint de vous occuper d'une carte créée par quelqu'un d'autre. Mais cela m'a été utile. Le point positif est que, contrairement à toutes les autres réponses, celle-ci n'utilise pas de boucles.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X