La carte en langage Go est un type de paire clé-valeur non ordonnée, qui peut accéder à la valeur correspondante en fonction de la clé. Dans certains cas, nous devons convertir les données de la carte en type tranche pour faciliter d'autres opérations. Cet article présente plusieurs méthodes de conversion de carte Golang en tranche.
Méthode 1 : utilisez une boucle for pour parcourir la carte
En parcourant la carte à travers une boucle for, vous pouvez ajouter les paires clé-valeur de la carte à la tranche une par une. Le code spécifique est le suivant :
package main import "fmt" func main() { var m map[string]int m = make(map[string]int) m["one"] = 1 m["two"] = 2 m["three"] = 3 keys := make([]string, 0, len(m)) values := make([]int, 0, len(m)) for key, value := range m { keys = append(keys, key) values = append(values, value) } fmt.Println(keys) // [one two three] fmt.Println(values) // [1 2 3] }
Méthode 2 : Utiliser la bibliothèque de réflexion
reflect est la bibliothèque de réflexion du langage Go, qui peut obtenir des informations de type, des méthodes d'appel, accéder aux champs de structure, etc. La carte peut être convertie en type Reflect.Value via la fonction Reflect.ValueOf(), puis les paires clé-valeur peuvent être obtenues via la méthode Reflect.Value. Le code spécifique est le suivant :
package main import ( "fmt" "reflect" ) func main() { var m map[string]int m = make(map[string]int) m["one"] = 1 m["two"] = 2 m["three"] = 3 keys := reflect.ValueOf(m).MapKeys() values := make([]int, 0, len(keys)) for _, key := range keys { values = append(values, m[key.String()]) } fmt.Println(keys) // [one two three] fmt.Println(values) // [1 2 3] }
Méthode 3 : utilisez la bibliothèque github.com/mitchellh/mapstructure
mapstructure est une bibliothèque d'analyse des structures, qui peut analyser les paires clé-valeur de la carte dans les champs correspondants de la structure. Cette bibliothèque fournit la fonction Decode(), qui peut analyser la carte dans n'importe quel type de valeur go, y compris le type de tranche. Le code spécifique est le suivant :
package main import ( "fmt" "github.com/mitchellh/mapstructure" ) func main() { var m map[string]int m = make(map[string]int) m["one"] = 1 m["two"] = 2 m["three"] = 3 values := make([]int, 0, len(m)) err := mapstructure.Decode(m, &values) if err != nil { fmt.Println(err) } else { fmt.Println(values) // [1 2 3] } }
Résumé :
Les trois méthodes ci-dessus peuvent convertir une carte en type de tranche. Parmi elles, la première méthode a des performances relativement faibles et convient à la conversion de cartes à petite échelle. Bien que la deuxième méthode utilise la bibliothèque de réflexion, son efficacité est toujours supérieure à celle de la première méthode. La troisième méthode consiste à utiliser une bibliothèque tierce, qui est pratique et rapide, et adaptée aux situations où les données cartographiques sont relativement complexes. Nous pouvons choisir différentes méthodes de conversion selon des scénarios spécifiques.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!