web-dev-qa-db-fra.com

Itérer sur toutes les clés d'une carte

Est-il possible d'obtenir une liste de toutes les clés d'une carte de langue Go? Le nombre d'éléments est donné par len(), mais si j'ai une carte comme celle-ci:

m := map[string]string{ "key1":"val1", "key2":"val2" };

Comment puis-je parcourir toutes les clés?

267
Martin Redmond

https://play.golang.org/p/JGZ7mN0-U-

for k, v := range m { 
    fmt.Printf("key[%s] value[%s]\n", k, v)
}

ou

for k := range m {
    fmt.Printf("key[%s] value[%s]\n", k, m[k])
}

Aller aux spécifications de langue pour les instructions for spécifie que la première valeur est la clé, la deuxième variable est la valeur, mais ne doit pas nécessairement être présente.

457
Jonathan Feinberg

Voici un moyen facile d’obtenir slice des touches de la carte.

// Return keys of the given map
func Keys(m map[string]interface{}) (keys []string) {
    for k := range m {
        keys = append(keys, k)
    }
    return keys
}

// use `Keys` func
func main() {
    m := map[string]interface{}{
        "foo": 1,
        "bar": true,
        "baz": "baz",
    }
    fmt.Println(Keys(m)) // [foo bar baz]
}
11
a8m

Est-il possible d'obtenir une liste de toutes les clés d'une carte de langue Go?

ks := reflect.ValueOf(m).MapKeys()

comment puis-je parcourir toutes les clés?

Utilisez la réponse acceptée:

for k, _ := range m { ... }
6
Sridhar