449 Stimmen

Iteration über alle Schlüssel einer Karte

Gibt es eine Möglichkeit, eine Liste aller Schlüssel in einer Go-Sprachkarte zu erhalten? Die Anzahl der Elemente ist gegeben durch len() aber wenn ich eine Karte habe wie:

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

Wie kann ich über alle Schlüssel iterieren?

747voto

Jonathan Feinberg Punkte 43293

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

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

oder

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

Go Sprachspezifikationen für for Aussagen gibt an, dass der erste Wert der Schlüssel ist, die zweite Variable ist der Wert, muss aber nicht vorhanden sein.

21voto

a8m Punkte 8928

Hier ist ein einfacher Weg zu bekommen slice der Map-Tasten.

// 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]
}

19voto

Sridhar Punkte 2264

Gibt es eine Möglichkeit, eine Liste aller Schlüssel in einer Go-Sprachkarte zu erhalten?

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

Wie kann ich alle Schlüssel durchgehen?

Verwenden Sie die akzeptierte Antwort:

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

6voto

Mohsen Punkte 3580

Eine typunabhängige Lösung:

for _, key := range reflect.ValueOf(yourMap).MapKeys() {
    value := yourMap.MapIndex(key).Interface()
    fmt.Println("Key:", key, "Value:", value)
}

4voto

fliX Punkte 711

Verwendung von Generika:

func Keys[K comparable, V any](m map[K]V) []K {
    keys := make([]K, 0, len(m))

    for k := range m {
        keys = append(keys, k)
    }

    return keys
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X