有没有办法获取 Go 语言映射中所有键的列表?元素的数量由 len()
给出,但如果我有这样的地图:
m := map[string]string{ "key1":"val1", "key2":"val2" };
如何遍历所有键?
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 指定第一个值是键,第二个变量是值,但不必存在。
以下是获取 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]
}
Keys
函数是否可以使用任何类型的键来获取映射,而不仅仅是字符串?
func Keys(m map[interface{}]interface{}) (keys []interface{})
,@RobertT.McGibbon 您需要更改函数“原型”
map[interface{}]interface{}
。 Go 不支持泛型。您不能创建带有 map
参数的函数,该函数接受具有不同键类型的映射。
有没有办法获取 Go 语言映射中所有键的列表?
ks := reflect.ValueOf(m).MapKeys()
如何遍历所有键?
使用公认的答案:
for _, k := range m { ... }
for _, k := range v.MapKeys()
,因为在您的示例中,k
将是键切片的 int 索引
与类型无关的解决方案:
for _, key := range reflect.ValueOf(yourMap).MapKeys() {
value := yourMap.MapIndex(key).Interface()
fmt.Println("Key:", key, "Value:", value)
}
value := s.MapIndex(key).Interface()
中的 s
是什么?
使用泛型:
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
}