迭代地图的所有键

时间:2009-12-03 17:15:19

标签: loops dictionary go

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

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

如何迭代所有键?

5 个答案:

答案 0 :(得分:445)

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

Go language specs for for statements指定第一个值是键,第二个变量是值,但不必存在。

答案 1 :(得分:10)

这是获取地图密钥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]
}

答案 2 :(得分:7)

  

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

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

如何迭代所有键?

使用接受的答案:

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

答案 3 :(得分:3)

A 类型不可知解决方案:

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

答案 4 :(得分:0)

这也是一个选择

 for key, element := range myMap{
    fmt.Println("Key:", key, "Element:", element)
 }