Golang之Map
一、创建和赋值
m := map[string]int{"one", 1, "tow": 2, "three": 3}
m1 := map[string]int{}
m1["one"] = 1
m2 := make(map[string]int, 10)
maps := make(map[string]string)
maps["one"] = "zhangsan"
maps["two"] = "tom"
maps["three"] = "mary"
for v, k := range maps{
fmt.Println(k, v)
}
二、删除
func TestMap(t *testing.T) {
item := map[int]string{
1: "12345",
2: "world",
3: "long",
}
t.Log(item)
delete(item, 1)
t.Log(item)
}
三、修改
func TestUpdate(t *testing.T) {
item := map[int]string{
1: "12345",
2: "world",
3: "long",
}
t.Log(item)
item[1] = "hello"
t.Log(item)
}
type Student struct {
Id int
Name string
}
func TestObj(t *testing.T) {
data := make(map[int]*Student)
data[1] = &Student{
Id: 1,
Name: "tom",
}
data[2] = &Student{
Id: 2,
Name: "zs",
}
t.Log(data[1])
t.Log(data[2])
one := data[1]
one.Name = "asas"
t.Log(data[1])
t.Log(data[2])
}
四、map排序
func TestMapSort(t *testing.T) {
items := map[string]int{
"Java": 1,
"Python": 2,
"C++": 3,
"C#": 4,
"PHP": 5,
"JavaScript": 6,
}
var SortString []string
for k := range items {
SortString = append(SortString, k)
}
sort.Strings(SortString)
for _, k := range SortString {
fmt.Println("key:", k, "Value:", items[k])
}
}
五、map嵌套
type EmployeeInformation map[string]int
func TestMapNested(t *testing.T) {
items := make(map[string]EmployeeInformation)
EmployeeItem := make(EmployeeInformation)
EmployeeItem["beijing"] = 1
EmployeeItem["tianjin"] = 2
EmployeeItem["hebei"] = 3
items["address1"] = EmployeeItem
items["address2"] = EmployeeInformation{
"shandong": 11,
"fuzhou": 23,
}
t.Log(items)
}
func TestCitys(t *testing.T) {
// 省
province := make(map[string]map[string][]string)
// 市
city := make(map[string][]string)
// 景区
scenery := make(map[string][]string)
scenery["西安"] = []string{"秦始皇兵马俑","大雁塔","大唐芙蓉园","华清池","黄巢堡国家森林公园","西安碑林博物馆"}
scenery["安康"] = []string{"中坝大峡谷","香溪洞","安康双龙生态旅游度假区"}
city["西安市区"] = []string{"新城区","碑林区","莲湖区","灞桥区","未央区","雁塔区","阎良区","临潼区","长安区","高陵区","咸阳区"}
city["安康市区"] = []string{"汉滨区","汉阴县","石泉县","宁陕县","紫阳县","岚皋县","平利县"}
province["陕西省"] = city
city["西安景区"] = scenery["西安"]
city["安康景区"] = scenery["安康"]
for k, v := range province {
fmt.Println(k, v)
for x, y := range v {
fmt.Println(x, y)
}
}
}
六、make和new
- make 只能为 slice、map或 channel 类型分配内存并初始化,同时返回一个有初始值的 slice、map 或 channel 类型引用,不是指针。
- 内建函数 new 用来分配内存,它的第一个参数是一个类型,不是一个值,它的返回值是一个指向新分配类型零值的指针。