Перебирая все ключи карты - PullRequest
263 голосов
/ 03 декабря 2009

Есть ли способ получить список всех ключей на карте языка Go? Количество элементов задается как len(), но если у меня есть карта типа:

m := map[string]string{ "key1":"val1", "key2":"val2" };

Как перебрать все ключи?

Ответы [ 3 ]

448 голосов
/ 03 декабря 2009

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 операторов указывают, что первое значение является ключом, вторая переменная является значением, но не обязательно должна присутствовать.

10 голосов
/ 10 декабря 2014

Вот простой способ получить 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]
}
7 голосов
/ 03 сентября 2016

Есть ли способ получить список всех ключей на карте языка Go?

ks := reflect.ValueOf(m).MapKeys()

как перебрать все ключи?

Используйте принятый ответ:

for k, _ := range m { ... }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...