- 目錄 -
Map集合
尚硅谷Golang課

Map集合

func main() {
	// map[key類型] value類型
	var m1 map[int]int = make(map[int]int)

	//key類型通常是int or string
	//value 通常是數字 or string or map or struct
	//只聲明不會給內存,要make才初始化才能用(跟切片一樣)
	m1[1] = 100
	m1[2] = 200
	m1[3] = 300
	m1[1] = 1000
	//key不能重複,後賦予的頂掉前面
	fmt.Println(m1)

	var m2 = make(map[string]string)
	m2["AV"] = "sss"
	fmt.Println(m2)

	//推薦寫法
	m3 := make(map[string]string)
	m3["一號"] = "台北"
	m3["二奧"] = "桃園"
	fmt.Println(m3)

	m4 := map[int]int{1: 10, 2: 20, 3: 30}
	fmt.Println(m4)

	//學生姓名+性別
	m5 := make(map[string](map[string]string))
	m5["stu01"] = make(map[string]string) //不能少
	m5["stu01"]["name"] = "tom"
	m5["stu01"]["sex"] = "男"
	m5["stu02"] = make(map[string]string) //不能少
	m5["stu02"]["name"] = "mary"
	m5["stu02"]["sex"] = "女"
	fmt.Println(m5)
	fmt.Println(m5["stu01"])
	fmt.Println(m5["stu01"]["sex"])

	var m6 = make(map[int]int)
	m6[1] = 10
	m6[2] = 20
	delete(m6, 1) //delete=刪除key
	delete(m6, 3) //delete空的東西也不會報錯
	//沒有辦法把key全刪除,要就用遍歷
	fmt.Println(m6)
	//重新分配一次=清空,但是格式要跟本來一樣
	m6 = make(map[int]int)
	fmt.Println(m6)

	//查找
	var m7 = make(map[int]int)
	m7[1] = 111
	m7[2] = 222
	val, ok := m7[2] //把一個map中的一個key賦給a,b 其中a=value b=bool(是否存在)
	fmt.Println(val, ok)
	if ok {
		fmt.Printf("m7存在key'1'且值為%v\n", val)
	} else {
		fmt.Printf("m7不存在key'n'\n")
	}

	//遍歷
	//因為map裡面的key-value不一定是連續的數字,所以不能用for而要用for:=range
	//m5 := make(map[string](map[string]string))

	for k, v := range m5 {
		fmt.Printf("k=%v \n", k)
		for k2, v2 := range v {
			fmt.Printf("	k2=%v v=%v \n", k2, v2)
		}

	}

	//長度=有幾對
	m8 := map[int]int{1: 10, 2: 20, 3: 30}
	fmt.Println(len(m8))

	//map切片
	//使用一個map來記錄monster的name跟age,且monster數量可以動態變化

	var mon []map[string]string = make([]map[string]string, 2)
	if mon[0] == nil {
		mon[0] = make(map[string]string, 2)
		mon[0]["name"] = "牛魔王"
		mon[0]["age"] = "500"
	}
	if mon[1] == nil {
		mon[1] = make(map[string]string, 2)
		mon[1]["name"] = "玉兔"
		mon[1]["age"] = "300"
	}

	// if mon[2] == nil {
	// 	mon[2] = make(map[string]string, 2)
	// 	mon[2]["name"] = "111"
	// 	mon[2]["age"] = "3440"
	// } //這樣寫越界
	//用append 先定義monster信息
	newMon := map[string]string{
		"name": "新妖怪",
		"age":  "200",
	}
	mon = append(mon, newMon)

	fmt.Println(mon)

	//用結構體更好,例如學號是唯一
	type Stu struct {
		Name    string
		Age     int
		Address string
	}
	stumaps := make(map[string]Stu)
	//創建學生
	stu1 := Stu{"tom", 18, "經"}
	stu2 := Stu{"mary", 50, "KJH"}
	stumaps["no1"] = stu1
	stumaps["no2"] = stu2
	fmt.Println(stumaps)
	//遍歷
	for k, v := range stumaps {
		fmt.Printf("學號=%v\n", k)
		fmt.Printf("	姓名=%v\n", v.Name)
		fmt.Printf("	年紀=%v\n", v.Age)
		fmt.Printf("	住址=%v\n", v.Address)
	}

}

上次修改於 2021-08-01

此篇文章的評論功能已經停用。