383

有没有办法获取 Go 语言映射中所有键的列表?元素的数量由 给出len(),但如果我有如下地图:

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

如何遍历所有键?

4

4 回答 4

654

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

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

或者

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

for语句的Go 语言规范指定第一个值是键,第二个变量是值,但不必存在。

于 2009-12-03T17:46:20.163 回答
19

这是获取slice地图键的一些简单方法。

// 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]
}
于 2014-12-10T09:59:55.067 回答
15

有没有办法获取 Go 语言映射中所有键的列表?

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

如何遍历所有键?

使用公认的答案:

for k, _ := range m { ... }
于 2016-09-03T16:20:20.160 回答
4

与类型无关的解决方案:

for _, key := range reflect.ValueOf(yourMap).MapKeys() {
    value := s.MapIndex(key).Interface()
    fmt.Println("Key:", key, "Value:", value)
}  
于 2021-01-01T00:48:32.630 回答