Map 變數: key-value 陣列

Golang 基礎: Map 變數: key-value 陣列

建立 Map 變數

map[key 的類型]value 的類型

m := make(map[string]int)
m["key_1"] = 7
m["key_2"] = 13

fmt.Println("map:", m)
// map: map[key_1:7 key_2:13]

取得 Map 鍵值資料

m := make(map[string]int)
m["key_1"] = 7
v1 := m["key_1"]
fmt.Println("v1: ", v1)
// v1:  7

Map 資料數量 len()

len(變數)

m := make(map[string]int)
m["key_1"] = 7
m["key_2"] = 13
fmt.Println("len:", len(m))
// len: 2

刪除 Map 指定鍵值資料 delete()

delete(變數, 鍵值)

m := make(map[string]int)
m["key_1"] = 7
m["key_2"] = 13

fmt.Println("map:", m)
// map: map[key_1:7 key_2:13]

delete(m, "key_1")
fmt.Println("map:", m)
// map: map[key_2:13]

判斷鍵值是否存在

變數資料, 是否存在 := map 變數[鍵值]

僅需要判斷資料是否存在,沒有需要使用該數值的話,可以將第一個參數設定為 底線 _,用第二個變數來判斷是否存在

m := make(map[string]int)
m["key_1"] = 7
m["key_2"] = 13

_, is_key2_exist := m["key_2"]
_, is_key3_exist := m["key_3"]
fmt.Println("is_key2_exist:", is_key2_exist)
fmt.Println("is_key3_exist:", is_key3_exist)
// is_key2_exist: true
// is_key3_exist: false

直接指定數值

m := map[string]string{"name": `KJ`, "age": `18`}
fmt.Println("developer:", m)
// developer: map[age:18 name:KJ]

使用 struct 型態在 map

package main

import "fmt"

type Person struct {
	FirstName string
	LastName  string
}

func main() {
	// 使用 make 建立 Map
	EmployeeMap := make(map[string]Person)
	EmployeeMap["KJ"] = Person{
		FirstName: "Kay",
		LastName:  "Jay",
	}

	// map[KJ:{FirstName:Kay LastName:Jay}]
	fmt.Printf("%+v\n", EmployeeMap)
}

Map 和 Struct 的選擇

欄位 Map Struct
鍵值 所有的 key 都需要是相同型別 -
數值資料 所有的 value 都需要是相同型別 value 可以是不同型別
迭代 Key 有被 indexed,因此可以進行迭代,列出所有的 key-value pairs Key 沒有被 indexed,因此沒辦法透過迭代的方式列出所有的 key-value pair
變數傳遞方式 Reference Type Value Type
用途 通常用在資料集合關聯性非常強的資料,例如 colors 通常用在一個帶有多種屬性的東西,例如 person
資料定義 不用一開始就知道所有的 key 有哪些,因為可以後續新增和刪除 需要一開始就清楚定義所有的欄位

參考資料