在 Go 語言中,有著一個強大又便捷的工具,可以讓你以鍵-值(Key-Value)的形式儲存和查詢資料,它就是「Map」。Map 在 Go 語言中扮演了重要的角色,簡化了許多資料處理的任務,現在讓我們一起來深入了解這個有趣的資料型別。
Map 是 Go 語言中的一種內建資料型別,用來存儲鍵值對。簡單來說,你可以將 Map 想像成一個無序的集合,每個元素都有一個唯一的鍵和相應的值。這讓你可以根據鍵來快速查詢和存取對應的值,就像是字典一樣。
在 Go 中,宣告 Map 可使用以下語法:
m1 := make(map[string]int) // 創建一個儲存字串為鍵,整數為值的 Map
m2 := map[int]string{1: "A", 2: "B"} // 創建一個包含鍵值對的映射
var m3 map[string]int // 創建一個鍵為字串、值為整數的空映射
而宣告時順便初始化可以使用以下方式:
myMap := map[string]int{
"apple": 3,
"banana": 5,
}
var myMap map[string]int
myMap = map[string]int{
"apple": 3,
"banana": 5,
}
Map 的操作非常簡單直觀。你可以使用鍵來存取對應的值,也可以使用鍵來新增、修改或刪除元素。
myMap["apple"] = 3 // 新增一個元素,鍵是 "apple",值是 3
myMap["banana"] = 5 // 新增一個元素,鍵是 "banana",值是 5
myMap["apple"] = 10 // 修改鍵為 "apple" 的元素的值為 10
value := myMap["banana"] // 根據鍵 "banana" 查詢對應的值
delete(myMap, "apple") // 刪除鍵為 "apple" 的元素
要遍歷一個 Map 中的所有元素,通常會使用 for range
迴圈:
for key, value := range myMap {
fmt.Println("Key:", key, "Value:", value)
}
雖然 Map 是極其方便的資料結構,但也有一些需要注意的地方:
sync
包中的相關函式進行安全操作。Map 在很多場景中都非常有用,例如:
package main
import "fmt"
func main() {
dictionary := map[string]string{
"apple": "a fruit",
"banana": "a yellow fruit",
"cherry": "a red fruit",
}
fmt.Println(dictionary["apple"])
fmt.Println(dictionary["banana"])
fmt.Println(dictionary["cherry"])
}
2. 計數器: 統計文字中每個單字的出現次數。
package main
import (
"fmt"
"strings"
)
func main() {
text := "apple banana apple cherry banana apple"
words := strings.Fields(text)
wordCount := make(map[string]int)
for _, word := range words {
wordCount[word]++
}
fmt.Println(wordCount)
}
3. 快速查詢: 儲存用戶名對應的用戶資訊。
package main
import "fmt"
func main() {
userMap := map[string]string{
"alice": "Alice Johnson",
"bob": "Bob Smith",
"charlie": "Charlie Brown",
}
fmt.Println(userMap["alice"])
fmt.Println(userMap["bob"])
}
4. 狀態存儲: 儲存玩家名字和對應的生命值。
package main
import "fmt"
func main() {
playerStatus := map[string]int{
"alice": 100,
"bob": 75,
"charlie": 90,
}
fmt.Println(playerStatus["alice"])
fmt.Println(playerStatus["bob"])
}
Map 是一種讓你能夠以鍵-值對的方式來組織和存儲資料的方式,它在 Go 語言中扮演著重要的角色。記住 Map 的基本概念、操作方法和限制,這將有助於你在寫程式時選擇適合的資料結構。