C'è un modo per ottenere un elenco di tutte le chiavi in una mappa della lingua Go? Il numero di elementi è dato da len()
, ma se ho una mappa come:
m := map[string]string{ "key1":"val1", "key2":"val2" };
Come posso scorrere tutte le chiavi?
C'è un modo per ottenere un elenco di tutte le chiavi in una mappa della lingua Go? Il numero di elementi è dato da len()
, ma se ho una mappa come:
m := map[string]string{ "key1":"val1", "key2":"val2" };
Come posso scorrere tutte le chiavi?
Risposte:
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])
}
Vai specifiche della lingua per le for
istruzioni specifica che il primo valore è la chiave, la seconda variabile è il valore, ma non deve essere presente.
Ecco un modo semplice per ottenere slice
le chiavi della mappa.
// 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
funzione prendere una mappa con tasti di qualsiasi tipo, non solo stringhe?
func Keys(m map[interface{}]interface{}) (keys []interface{})
, @ RobertT.McGibbon devi cambiare la funzione "prototipo"
map[interface{}]interface{}
. Go non supporta i generici. Non è possibile creare una funzione con un map
parametro che accetta mappe con tipi di chiave diversi.
C'è un modo per ottenere un elenco di tutte le chiavi in una mappa della lingua Go?
ks := reflect.ValueOf(m).MapKeys()
come posso scorrere tutte le chiavi?
Usa la risposta accettata:
for k, _ := range m { ... }
for _, k := range v.MapKeys()
, dal momento che nel tuo esempio k
sarebbe l'indice int della porzione di chiavi