Iterando sobre todas las claves de un mapa.
¿Hay alguna manera de obtener una lista de todas las claves en un mapa de idioma Go? El número de elementos viene dado por len()
, pero si tengo un mapa como:
m := map[string]string{ "key1":"val1", "key2":"val2" };
¿Cómo itero sobre todas las claves?
Aceptado
https://play.golang.org/p/JGZ7mN0-U-
for k, v := range m {
fmt.Printf("key[%s] value[%s]\n", k, v)
}
o
for k := range m {
fmt.Printf("key[%s] value[%s]\n", k, m[k])
}
Las especificaciones de lenguaje Go para for
declaraciones especifican que el primer valor es la clave y la segunda variable es el valor, pero no es necesario que esté presente.
A continuación se muestra una forma sencilla de obtener slice
las claves del mapa.
// 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]
}
¿Hay alguna manera de obtener una lista de todas las claves en un mapa de idioma Go?
ks := reflect.ValueOf(m).MapKeys()
¿Cómo repito todas las claves?
Utilice la respuesta aceptada:
for _, k := range m { ... }
Una solución independiente del tipo:
for _, key := range reflect.ValueOf(yourMap).MapKeys() {
value := yourMap.MapIndex(key).Interface()
fmt.Println("Key:", key, "Value:", value)
}
Usando genéricos:
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
}