168 votes

Dans Go, comment obtenir une tranche de valeurs à partir d'une carte ?

Si j'ai une carte m Y a-t-il un meilleur moyen d'obtenir une tranche de valeurs ? v que ça ?

package main
import (
  "fmt"
)

func main() {
    m := make(map[int]string)

    m[1] = "a"
    m[2] = "b"
    m[3] = "c"
    m[4] = "d"

    // Can this be done better?
    v := make([]string, len(m), len(m))
    idx := 0
    for  _, value := range m {
       v[idx] = value
       idx++
    }

    fmt.Println(v)
 }

Existe-t-il une fonction intégrée d'un map ? Existe-t-il une fonction dans un paquetage Go, ou est-ce le seul moyen de le faire ?

1voto

Chris Redford Points 1417

Vous pouvez utiliser ce maps paquet :

go get https://github.com/drgrib/maps

Alors tout ce que vous avez à faire est d'appeler

values := maps.GetValuesIntString(m)

C'est une sécurité de type pour ce commun map combinaison. Vous pouvez generate d'autres fonctions sûres pour tout autre type de map en utilisant le mapper dans le même paquet.

Divulgation complète : je suis le créateur de ce paquet. Je l'ai créé parce que je me suis retrouvé à réécrire ces fonctions pour map de façon répétée.

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