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
此篇文章的評論功能已經停用。