Go語言程式建立地圖副本


在 Go 語言中,地圖是引用資料型別,這意味著將一個地圖變數賦值給另一個變數會建立對同一底層資料結構的引用。要建立地圖的獨立副本,我們需要使用不同的方法。在本文中,我們將探討兩種方法,包括手動方法和 copy() 函式方法,以在 Go 語言中建立地圖的副本。

語法

newMap := make(map[keyType]valueType)

在此語法中,我們首先使用 make() 函式宣告一個名為 newMap 的新地圖,並指定適當的鍵和值型別。

originalMap := map[string]int

語法 originalMap := map[string]int{} 宣告並初始化一個名為“originalMap”的新地圖,其鍵型別為字串,值型別為整數。這是一個空地圖,我們稍後將填充它或使用它來建立另一個地圖的副本。

newMap := make(map[string]int, len(originalMap))

語法 newMap := make(map[string]int, len(originalMap)) 建立一個名為“newMap”的新地圖,其鍵型別為字串,值型別為整數。

func copyMap(newMap, originalMap map[string]int) 

語法 func copyMap(newMap, originalMap map[string]int) 定義了一個名為 copyMap 的函式。此函式接受兩個引數:newMap 和 originalMap,它們都是鍵型別為字串,值型別為整數的地圖。

演算法

  • 建立一個新的地圖變數,其鍵和值型別與原始地圖相同。

  • 遍歷原始地圖中的鍵值對。

  • 對於每次迭代,將鍵值對複製到新地圖。

  • 新地圖現在是原始地圖的單獨副本。

示例

在此示例中,考慮一個原始地圖 originalMap,其鍵值對錶示學生姓名及其對應的年齡。我們將使用手動方法建立此地圖的副本。

package main

import "fmt"

func main() {
	originalMap := map[string]int{
		"John":  20,
		"Alice": 25,
		"Bob":   22,
	}

	newMap := make(map[string]int)
	for key, value := range originalMap {
		newMap[key] = value
	}

	fmt.Println("Original Map:", originalMap)
	fmt.Println("Copied Map:", newMap)
}

輸出

Original Map: map[Alice:25 Bob:22 John:20]
Copied Map: map[Alice:25 Bob:22 John:20]

示例

在此示例中,我們將使用轉換和迭代的組合在 Go 語言中建立地圖的副本。讓我們考慮一個原始地圖 originalMap,其鍵值對錶示學生姓名及其對應的年齡。我們將使用 copy() 函式建立此地圖的副本。

package main

import "fmt"

func main() {
	originalMap := map[string]int{
		"John":  20,
		"Alice": 25,
		"Bob":   22,
	}

	newMap := make(map[string]int, len(originalMap))
	copyMap(newMap, originalMap)

	fmt.Println("Original Map:", originalMap)
	fmt.Println("Copied Map:", newMap)
}

func copyMap(newMap, originalMap map[string]int) {
	for key, value := range originalMap {
		newMap[key] = value
	}
}

輸出

Original Map: map[Alice:25 Bob:22 John:20]
Copied Map: map[Alice:25 Bob:22 John:20]

示例

在此示例中,讓我們考慮一個名為 originalMap 的地圖,其中包含表示學生姓名及其對應分數的鍵值對。我們希望在 Go 語言中建立一個名為 newMap 的地圖副本。我們遍歷原始地圖的鍵值對,並透過將相同的鍵值對分配給新地圖來建立一個新地圖。

package main

import "fmt"

func main() {
	originalMap := map[string]int{
		"John":   85,
		"Alice":  90,
		"Bob":    75,
		"Sara":   95,
		"Michael": 80,
	}

	// Creating a copy of the map using a loop
	newMap := make(map[string]int)
	for key, value := range originalMap {
		newMap[key] = value
	}

	fmt.Println("Original Map:", originalMap)
	fmt.Println("New Map:", newMap)
}

輸出

Original Map: map[Alice:90 Bob:75 John:85 Michael:80 Sara:95]
New Map: map[Alice:90 Bob:75 John:85 Michael:80 Sara:95]

現實生活中的應用

庫存管理

想象一下,您正在管理零售店的庫存。您有一個地圖,其中包含庫存中的產品及其數量。您希望為不同的部門生成報表,而無需更改原始庫存資料。建立庫存地圖的副本允許您為各個部門生成報表,而無需修改原始庫存水平。這確保了每個部門的準確報表,同時保持了庫存資料的完整性。

調查資料分析

假設您正在為研究專案分析調查回覆。您有一個地圖,其中儲存調查問題作為鍵,相應的回覆作為值。您希望對資料執行不同的分析,而無需更改原始回覆。透過建立回覆地圖的副本,您可以對資料執行各種分析和轉換,而無需更改原始調查回覆。這使您能夠嘗試不同的分析技術,同時保持原始資料完整。

結論

地圖複製涉及遍歷舊地圖的鍵值對並將它們轉移到新地圖。在本文中,我們研究瞭如何使用手動方法、copy() 函式或迴圈迭代和分配鍵值對來在 Go 語言中建立地圖的副本。瞭解這些方法可以為有效地管理 Go 程式設計中的地圖資料提供寶貴的見解。這些方法可用於庫存管理以及調查資料分析。

更新時間: 2023年9月7日

599 次瀏覽

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.