Iterando sobre todas las claves de un mapa.

Resuelto Martin Redmond asked hace 15 años • 6 respuestas

¿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?

Martin Redmond avatar Dec 04 '09 00:12 Martin Redmond
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 fordeclaraciones especifican que el primer valor es la clave y la segunda variable es el valor, pero no es necesario que esté presente.

Jonathan Feinberg avatar Dec 03 '2009 17:12 Jonathan Feinberg

A continuación se muestra una forma sencilla de obtener slicelas 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]
}
a8m avatar Dec 10 '2014 09:12 a8m

¿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 { ... }
Sridhar avatar Sep 03 '2016 16:09 Sridhar

Una solución independiente del tipo:

for _, key := range reflect.ValueOf(yourMap).MapKeys() {
    value := yourMap.MapIndex(key).Interface()
    fmt.Println("Key:", key, "Value:", value)
}  
Mohsen avatar Jan 01 '2021 00:01 Mohsen

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
}
fliX avatar Apr 18 '2022 11:04 fliX