Maison >développement back-end >Golang >carte du Golang à découper

carte du Golang à découper

PHPz
PHPzoriginal
2023-05-10 10:13:361185parcourir

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn