Czy istnieje sposób na uzyskanie listy wszystkich kluczy na mapie językowej Go? Liczba elementów jest podana przez len()
, ale jeśli mam mapę, taką jak:
m := map[string]string{ "key1":"val1", "key2":"val2" };
Jak iterować po wszystkich kluczach?
Czy istnieje sposób na uzyskanie listy wszystkich kluczy na mapie językowej Go? Liczba elementów jest podana przez len()
, ale jeśli mam mapę, taką jak:
m := map[string]string{ "key1":"val1", "key2":"val2" };
Jak iterować po wszystkich kluczach?
Odpowiedzi:
https://play.golang.org/p/JGZ7mN0-U-
for k, v := range m {
fmt.Printf("key[%s] value[%s]\n", k, v)
}
lub
for k := range m {
fmt.Printf("key[%s] value[%s]\n", k, m[k])
}
Specyfikacje języka Go dla for
instrukcji określa, że pierwsza wartość jest kluczem, druga zmienna jest wartością, ale nie musi być obecna.
Oto prosty sposób na zdobycie slice
klawiszy mapy.
// 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
funkcja może pobrać mapę z kluczami dowolnego typu, a nie tylko z ciągami znaków?
func Keys(m map[interface{}]interface{}) (keys []interface{})
, @ RobertT.McGibbon musisz zmienić funkcję „prototyp”
map[interface{}]interface{}
. Go nie obsługuje rodzajów ogólnych. Nie można utworzyć funkcji z map
parametrem, który akceptuje mapy z różnymi typami kluczy.
Czy istnieje sposób na uzyskanie listy wszystkich kluczy na mapie językowej Go?
ks := reflect.ValueOf(m).MapKeys()
jak iterować po wszystkich kluczach?
Użyj zaakceptowanej odpowiedzi:
for k, _ := range m { ... }
for _, k := range v.MapKeys()
, ponieważ w twoim przykładzie k
będzie to int indeks części klucza