有没有一种方法可以在Go语言映射中获得所有键的列表?元素的数量由len()给出,但如果我有一个像这样的映射:

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

如何遍历所有键?


当前回答

用于映射[string]字符串的排序键。

package main

import (
    "fmt"
    "sort"
)

func main() {
    m := map[string]string{"key1": "val1", "key2": "val2"}
    sortStringMap(m)
}

// sortStringMap prints the [string]string as keys sorted
func sortStringMap(m map[string]string) {
    var keys []string
    for key := range m {
        keys = append(keys, key)
    }
    sort.Strings(keys)  // sort the keys
    for _, key := range keys {
        fmt.Printf("%s\t:%s\n", key, m[key])
    }
}

输出:

key1    :val1
key2    :val2

其他回答

用于映射[string]字符串的排序键。

package main

import (
    "fmt"
    "sort"
)

func main() {
    m := map[string]string{"key1": "val1", "key2": "val2"}
    sortStringMap(m)
}

// sortStringMap prints the [string]string as keys sorted
func sortStringMap(m map[string]string) {
    var keys []string
    for key := range m {
        keys = append(keys, key)
    }
    sort.Strings(keys)  // sort the keys
    for _, key := range keys {
        fmt.Printf("%s\t:%s\n", key, m[key])
    }
}

输出:

key1    :val1
key2    :val2

类型不可知的解决方案:

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

有没有一种方法可以在Go语言映射中获得所有键的列表?

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

如何遍历所有键?

使用公认的答案:

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

使用泛型:

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
}

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

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

or

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

Go语言规范for语句指定第一个值是键,第二个变量是值,但不一定要出现。