Go で map をコピーする
Jay Singh
2022年8月23日
このチュートリアルでは、Go でマップをコピーする方法を示します。
Go で map をコピーする
Go では、マップは順序付けされていないキーと値のペアのコレクションです。キーを使用して取得、更新、または削除できるクイックルックアップと値を可能にするため、人気があります。
Go のマップは参照型であるため、あるインスタンスを別のインスタンスに割り当てて、マップのコンテンツを深く複製することはできません。新しい空のマップを作成し、forrange ループを使用して適切なキーと値のペアをマップに追加できます。
Go では、これがこの問題に対する最も簡単で効率的な解決策です。
複製されたマップは、この出力例ではディープクローンであり、ピースを追加しても元のマップには影響しません。
例 1:
package main
import "fmt"
func main() {
dark := map[string]int{
"Jay": 1,
"Adam": 2,
"Eve": 3,
}
// copy a map
darkch := make(map[string]int)
for k, v := range dark {
darkch[k] = v
}
darkch["Jonas"] = 4
fmt.Println("Original")
fmt.Println(dark)
fmt.Println("Copied")
fmt.Println(darkch)
}
出力:
Original
map[Adam:2 Eve:3 Jay:1]
Copied
map[Adam:2 Eve:3 Jay:1 Jonas:4]
この例では、名前とロール番号を元のマップにマップします。
例 2:
package main
import (
"fmt"
)
func main() {
studs := map[string]int{
"Jay": 1,
"Adam": 2,
"Eve": 3,
}
studs_tmp := make(map[string]int)
for name, roll_no := range studs {
studs_tmp[name] = roll_no
}
for name, roll_no := range studs_tmp {
fmt.Println("Name: ", name, ", roll_no: ", roll_no)
}
}
出力:
Name: Jay , roll_no: 1
Name: Adam , roll_no: 2
Name: Eve , roll_no: 3