Golang學習筆記:Map的基本操作

最後更新於 2021 年 5 月 23 日

Map是一種無序的鍵值對集合,map最重要的一點是通過 key 來快速檢索數據,類似陣列和切片的索引,指向數據的值。

定義方式

第一種

首先宣告一個Map變數值為空。我們需要通過 make 來開闢內部空間並做基本的賦值

var myMap map[string]string
//在使用map前需要先用make給map分配數據空間
myMap = make(map[string]string, 10)

myMap["name"] = "小明"
myMap["address"] = "台灣新北市"
myMap["phone"] = "0905123456"

fmt.Println(myMap) //map[address:台灣新北市 name:小明 phone:0905123456]

鍵值對不存在 或者 沒有初始化map , 會回傳預設值nil

if myMap == nil{
	fmt.Println("myMap是一個空map")
}

你會發現打印出來的順序並非按照程式碼所寫的順序,這是因為map是使用雜湊函式(hash)來實現的。

第二種

直接藉由make()創建Map型別變數就可以不用分配空間大小,之後再去賦值

myMap2 := make(map[int]string) //可以不用分配空間大小, 默認會分配一些
myMap2[1] = "小明"
myMap2[2] = "台灣新北市"
myMap2[3] = "0905123456"

fmt.Println(myMap2) //map[1:小明 2:台灣新北市 3:0905123456]

第三種

在宣告map的時候直接使用 { } 新增鍵值對初始化,在初始化過程時已經開闢了空間因此不需要使用make

myMap3 := map[string] string{
	"name": "小明",
	"address": "台灣新北市",
	"phone": "0905123456",
}

fmt.Println(myMap3) //map[address:台灣新北市 name:小明 phone:0905123456]

注意每一個鍵值對後方都要加上 , 包括最後一個鍵值對也是。

使用方式

新增元素

使用 mapName[key] = value 新增元素

var myMap = make(map[string]string, 10)
myMap["name"] = "小明"
myMap["address"] = "台灣新北市"
myMap["phone"] = "0905123456"
fmt.Println(myMap) //map[address:台灣新北市 name:小明 phone:0905123456]

myMap2 := make(map[int]string)
myMap2[1] = "小明"
myMap2[2] = "台灣新北市"
myMap2[3] = "0905123456"
fmt.Println(myMap2) //map[1:小明 2:台灣新北市 3:0905123456]

myMap3 := map[string] string{
    "name": "小明",
    "address": "台灣新北市",
    "phone": "0905123456",
}
myMap3["email"] = "pluto@gmail.com"
fmt.Println(myMap3) //map[address:台灣新北市 email:pluto@gmail.com name:小明 phone:0905123456]

刪除元素

delete(mapName, key) 函數用於刪除集合的元素,參數為Map和其對應的key

myMap3 := map[string] string{
	"name": "小明",
	"address": "台灣新北市",
	"phone": "0905123456",
}

delete(myMap, "address")

fmt.Println(myMap3)

修改元素

與新增元素的方式一樣,差別只在key為想要修改的鍵值對的key

myMap3 := map[string]string{
	"name":    "小明",
	"address": "台灣新北市",
	"phone":   "0905123456",
}

myMap3["name"] = "小王"
fmt.Println(myMap3) //map[address:台灣新北市 name:小王 phone:0905123456]

走訪

可以用迭代器走訪映射:

myMap2 := make(map[string]string)
myMap2["name"] = "小明"
myMap2["address"] = "台灣新北市"
myMap2["phone"] = "0905123456"

//利用 rage 取得 map 中所有的 key 和 value, 並列印
for key, value := range myMap2 {
	fmt.Println(fmt.Sprintf("%s: %s", key, value))
}

output

name: 小明
address: 台灣新北市
phone: 0905123456
0 0 評分數
Article Rating
訂閱
通知
guest

0 Comments
在線反饋
查看所有評論