マップからキーのスライスを取得する 質問する

マップからキーのスライスを取得する 質問する

Go でマップからキーのスライスを取得するよりシンプルで良い方法はありますか?

現在、マップを反復処理してキーをスライスにコピーしています。

i := 0
keys := make([]int, len(mymap))
for k := range mymap {
    keys[i] = k
    i++
}

ベストアンサー1

これは古い質問ですが、私の意見を述べます。PeterSO の回答は少し簡潔ですが、少し効率が悪くなります。サイズがどれくらいになるかは既にわかっているので、append を使用する必要さえありません。

keys := make([]int, len(mymap))

i := 0
for k := range mymap {
    keys[i] = k
    i++
}

ほとんどの場合、それほど大きな違いはないでしょうが、作業量もそれほど増えず、私のテスト (1,000,000 個のランダムint64キーを含むマップを使用し、各メソッドでキーの配列を 10 回生成) では、配列のメンバーを直接割り当てる方が、append を使用するよりも約 20% 高速でした。

容量を設定すると再割り当ては不要になりますが、追加ごとに容量に達したかどうかを確認するために、追加で追加の作業を行う必要があります。

おすすめ記事