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])
}
for
ステートメントのGo言語仕様では、最初の値がキー、2番目の変数が値であることを指定していますが、存在する必要はありません。
以下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インデックスになるという意味だったと思います