go基础8-字典map

字典     存储键值对映射关系的集合    go map也是一个无序集合

var  testMap  map[string]int

testMap = map[string]int{

  "one":1,

  "two":2,

  "three":3

}

 

k :="two"

v,ok := testMap[k]

if ok {

  fmt.Printf("key %q:%d",k,v)

}else{

  fmt.Printf("not fund")

}

 

字典声明  

var testMap map[string]int

 

字典初始

testMap := map[string]int{

  "one":1

}

 

还可以像切片一样 通过go语言函数 make 来初始化一个新字典

var  testMap = make(map[string]int)

 

通过make函数第二个参数选择是否在创建是指定该字典的存储容量   超出会自动扩展

testMap = make(map[string]int,100)

使用入门 

元素赋值          testMap["four"] = 4

字典初始化才能进行赋值操作     如果仅仅是声明 此时testMap 的值是nil    在nil上进行操作编译会报panic  导致编译不通过

 

查找元素

value   ,ok     := testMap["one"]

if ok {//找到了

  

}

在字典中查找指定键时,会返回2个值  第一个是返回的键值  第二个是能找到的标识 判断是否在字典找到指定的键   类型为bool

哈希冲突 有空了解一下

 

删除元素

delete(testMap,"four")     从testMap 删除键为four的键值对   如果不存在 没什么副作用

 

遍历字典

testMap  := map[string]int{

  "one":1,

  "two":2,

  "three":3

}

 

for  key,value :=range testMap{

  fmt.Println(key,value)

}

由于字典是无序的,所以上述代码输出结果如下:

three 3
one 1
two 2            //不是很明白  难道是随机

匿名变量

for _,value := range testMap{

  fmt.Println(value)

}

for key := ragne testMap{

  fmt.Println(key)

}

 

键值对调

invMap := make(map[int]string,3)

 

for k,v := range  testMap{

  invMap[v]  = k

}

 

字典排序

go map是无序集合   如果要进行排序  可以通过为字典的键和值创建切片 然后通过对切片进行排序实现

按照键进行排序

keys :=make([]string,0)

for k,_:=range testMap{

  keys = append(keys,k)

}

sort.Strings(keys)//对键进行排序         sort.Ints(values)//对值进行排序

 

posted @ 2021-04-09 14:50  fly_fly_fly#  阅读(33)  评论(0编辑  收藏  举报