Есть ли способ получить список всех ключей на карте языка Go? Количество элементов определяется как len()
, но если у меня есть карта вроде:
m := map[string]string{ "key1":"val1", "key2":"val2" };
Как мне перебрать все ключи?
Есть ли способ получить список всех ключей на карте языка Go? Количество элементов определяется как len()
, но если у меня есть карта вроде:
m := map[string]string{ "key1":"val1", "key2":"val2" };
Как мне перебрать все ключи?
Ответы:
https://play.golang.org/p/JGZ7mN0-U-
for k, v := range m {
fmt.Printf("key[%s] value[%s]\n", k, v)
}
или
for k := range m {
fmt.Printf("key[%s] value[%s]\n", k, m[k])
}
В спецификации языка Go для for
операторов указано, что первое значение является ключом, вторая переменная является значением, но не обязательно должна присутствовать.
Вот несколько простых способов получить slice
ключи-карты.
// 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
функции взять карту с ключами любого типа, а не только со строками?
func Keys(m map[interface{}]interface{}) (keys []interface{})
, @ RobertT.McGibbon вам нужно изменить функцию «прототип»
map[interface{}]interface{}
. Go не поддерживает генерики. Вы не можете создать функцию с map
параметром, который принимает карты с различными типами ключей.
Есть ли способ получить список всех ключей на карте языка Go?
ks := reflect.ValueOf(m).MapKeys()
как мне перебрать все ключи?
Используйте принятый ответ:
for k, _ := range m { ... }
for _, k := range v.MapKeys()
, так как в вашем примере k
будет int индекс среза ключей