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 有哪些,因為可以後續新增和刪除 | 需要一開始就清楚定義所有的欄位 |