Map简介:
key-value的数据结构,又叫字典或关联数组
Map数据结构:
map是引用类型
写法:var map1 map[keytype]valuetype
一:字典声明
注意:声明是不会分配内存的,初始化需要make
所以:可以简写为 test :=make(map[string]int,10)
--> 创建一个test字典: key类型为string,value类型为int,长度为10. (如果超出会panic,index out of range)
var map1 map[keytype]valuetype
var a map[string]string
var a map[string]int
var a map[int]string
var a map[string]map[string]string
var a map[string]int
a = make(map[string]int,10)
a["abc"] = 200
a["abc"] = 1200
a["hello"] = 222
二:Map操作
var c map[string]string = map[string]string{"hi":"word"}
c["cc"] = "aaa"
插入:
a[“hello”] = “world”
查找:
//字典查找:通过key查找val.
// --返回2个元素,一个是val,一个是布尔值
//字典查找key时,如果只指定一个返回值,那找不到就是0
//这种方法,不好确定,如果val是0呢? 那就尴尬了
Val,exist:= a[“hello”]
if exist{
fmt.Printf("val=%d\n",ok)
}else {
fmt.Printf("not found %s\n",val)
}
遍历:
for k,v :=range a{
fmt.Println("for",k,v)
}
删除:
//a字典
//hello is key
delete(a,"hello")
长度:len(a)
示例:函数传递字典
func test2(a map[string]int) {
a["one"] = 134
}
func mian(){
//map 是引用类型,所有会修改原有map
a := make(map[string]int,10)
test2(a)
}
三:map中创建切片
栗子1:
func test4() {
aa := make([]map[int]int, 5)
for i := 0; i < 5; i++ {
aa[i] = make(map[int]int)
aa[i][2] = 2
}
fmt.Println("test4",aa)
}
>>>
test4 [map[2:2] map[2:2] map[2:2] map[2:2] map[2:2]]
栗子2:
func test3() {
//创建切片,
//切片里面放置map
//默认map都是nil,需要赋值
s:=make([]map[string]int,10)
for i:=0;i<len(s);i++{
//赋值初始化
//100是map的容量.如果超了。底层会自动扩容
s[i] = make(map[string]int,100)
}
s[0]["aaa"]=100
s[0]["acc"]=100
s[0]["1aa"]=100
s[2]["ccc"]=100
fmt.Println("sss",s)
}
>>>
sss [map[aaa:100 acc:100 1aa:100] map[] map[ccc:100] map[] map[] map[] map[] map[] map[] map[]]
四:Map排序
先获取所有key,把key排序
按照拍好序的key,进行遍历
var keys []string
for k, v := range a {
fmt.Printf("a[%s] = %d\n", k, v)
keys = append(keys, k)
}
sort.Strings(keys)
for _, k := range keys {
fmt.Printf("Sort,a[%s]=%d\n", k, a[k])
}
声明是不会分配内存的,初始化需要make
©著作权归作者所有:来自51CTO博客作者zhaichaoqun的原创作品,如需转载,请与作者联系,否则将追究法律责任