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% 高速でした。
容量を設定すると再割り当ては不要になりますが、追加ごとに容量に達したかどうかを確認するために、追加で追加の作業を行う必要があります。