Loops 迭代映射的所有键

Loops 迭代映射的所有键,loops,dictionary,go,Loops,Dictionary,Go,有没有办法获得围棋语言地图中所有键的列表?元素的数量由len()给出,但如果我有一个类似以下的映射: m := map[string]string{ "key1":"val1", "key2":"val2" }; 如何迭代所有键? 或 指定第一个值是键,第二个变量是值,但不必存在。以下是获取贴图键的切片的一些简单方法 // Return keys of the given map func Keys(m map[string]interface{}) (keys []string) {

有没有办法获得围棋语言地图中所有键的列表?元素的数量由
len()
给出,但如果我有一个类似以下的映射:

m := map[string]string{ "key1":"val1", "key2":"val2" };
如何迭代所有键?


指定第一个值是键,第二个变量是值,但不必存在。

以下是获取贴图键的切片的一些简单方法

// 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]
}
有没有办法获得围棋语言地图中所有键的列表

如何迭代所有键

使用公认的答案:

for k, _ := range m { ... }
这也是一种选择

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

类型不可知的解决方案:

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

作为一个可能的问题,请注意迭代的顺序是未定义的。Sudhir:golang语言规范明确定义映射具有未定义的键顺序。此外,从Go 1开始,密钥顺序在运行之间被故意随机分配,以防止依赖于任何感知的顺序。请注意,这不是一个可变的迭代,也就是说,删除密钥将需要重新启动迭代。对于小数据集,映射顺序是可以预测的。
Keys
函数是否可以使用任何类型的键(而不仅仅是字符串)进行映射?
func-Keys(m-map[interface{}]interface{})(Keys[]interface{})
,@RobertT.McGibbon您需要更改函数“prototype”@ArielM。这只适用于确切的类型
map[interface{}]interface{}
。Go不支持泛型。您不能使用
map
参数创建一个函数,该参数接受具有不同键类型的映射。我认为您的意思是
for,k:=range v.MapKeys()
,因为在您的示例中,
k
将是键片的int索引
for k, _ := range m { ... }
 for key, element := range myMap{
    fmt.Println("Key:", key, "Element:", element)
 }
for _, key := range reflect.ValueOf(yourMap).MapKeys() {
    value := s.MapIndex(key).Interface()
    fmt.Println("Key:", key, "Value:", value)
}