有没有一种方法可以在Go语言映射中获得所有键的列表?元素的数量由len()给出,但如果我有一个像这样的映射:
m := map[string]string{ "key1":"val1", "key2":"val2" };
如何遍历所有键?
有没有一种方法可以在Go语言映射中获得所有键的列表?元素的数量由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]
}
其他回答
有没有一种方法可以在Go语言映射中获得所有键的列表?
ks := reflect.ValueOf(m).MapKeys()
如何遍历所有键?
使用公认的答案:
for _, k := range m { ... }
类型不可知的解决方案:
for _, key := range reflect.ValueOf(yourMap).MapKeys() {
value := yourMap.MapIndex(key).Interface()
fmt.Println("Key:", key, "Value:", value)
}
这里有一些简单的方法来获得地图键的切片。
// 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]
}
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语句指定第一个值是键,第二个变量是值,但不一定要出现。
用于映射[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