Чи є спосіб отримати список усіх ключів на карті мови 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
буде інт-індекс фрагмента ключів