Map2
map增加和更新:
map["key"] = value //如果key还没有,就是增加,如果key存在就是修改
案例演示:
func main() {
   cities := make(map[string]string)
	  cities["no1"] = "北京"
	  cities["no2"] = "天津"
	  cities["no3"] = "上海"
	  //因为 no3这个key已经存在,因此下面的这句话就是修改
	  cities["no3"] = "上海~" 
	  fmt.Println(cities)
}
map删除:
说明:
delete(map, "key"), delete 是一个内置函数,如果key存在,就删除该key-value,如果key不存在,不操作,但是也不会报错。
func delete
func delete(m map[Type]Type1, key Type)
delete 内建函数按照指定的键将元素从映射中删除。 若 m 为 nil 或无此元素,delete 即为空操作。
案例演示:
func main() {
	  cities := make(map[string]string)
	  cities["no1"] = "北京"
	  cities["no2"] = "天津"
	  cities["no3"] = "上海"
	  //因为 no3这个key已经存在,因此下面的这句话就是修改
	  cities["no3"] = "上海~" 
	  fmt.Println(cities)
      delete(cities, "no1")
	  fmt.Println(cities)
      //当delete指定的key不存在时,删除不会操作,也不会报错
	  delete(cities, "no4")
	  fmt.Println(cities)
}

细节说明:
1)如果我们要删除map的所有key,没有一个专门的方法一次删除,可以遍历一下key,逐个删除
2)或者 map = make(...),make一个新的,让原来的称为垃圾,被gc回收。
func main() {
      cities := make(map[string]string)
	  cities["no1"] = "北京"
	  cities["no2"] = "天津"
	  cities["no3"] = "上海"
	
      cities = make(map[string]string)
	  fmt.Println(cities)
}
map查找:
案例演示:
func main() {
      cities := make(map[string]string)
	  cities["no1"] = "北京"
	  cities["no2"] = "天津"
	  cities["no3"] = "上海"
	
      val, ok := cities["no2"]
	  if ok {
		    fmt.Printf("有no2 key 值为%v", val)
	  } else {
		    fmt.Printf("没有no2 key\n")
	  }
}
对上面的代码的说明:
如果 cities 这个map中存在"no2",那么ok 就会返回true,否则返回false。
map遍历:
    案例演示相对复杂的map遍历:该map的value 又是一个map
    
    说明:map的遍历使用for-range的结构遍历
    
案例演示:
func main() {
	  //使用for-range遍历map
	  cities := make(map[string]string)
	  cities["no1"] = "北京"
	  cities["no2"] = "天津"
	  cities["no3"] = "上海"
	  for k, v := range cities {
		    fmt.Printf("k=%v v=%v \n", k, v)
	  }
	  //使用for-range遍历一个结构比较复杂的map
	  studentMap := make(map[string]map[string]string, 10)
	  studentMap["stu01"] = make(map[string]string, 3)
	  studentMap["stu01"]["name"] = "tom"
	  studentMap["stu01"]["sex"] = "男"
	  studentMap["stu01"]["address"] = "北京长安街"
	  studentMap["stu02"] = make(map[string]string, 3) //这句话不能少
	  studentMap["stu02"]["name"] = "mary"
	  studentMap["stu02"]["sex"] = "女"
	  studentMap["stu02"]["address"] = "北京东沙村"
	  for k1, v1 := range studentMap {
		    fmt.Println("k1=",k1)
		    for k2, v2 := range v1 {
			      fmt.Printf("\t k2=%v v2=%v \n", k2, v2)
		    }
		    fmt.Println()
	  }
}
 
map的长度:
func len
func len(v Type) int
len 内建函数返回 v 的长度,这取决于具体类型:
   数组:v 中元素的数量。
      数组指针:*v 中元素的数量(即使 v 为 nil)。
      切片或映射:v 中元素的数量;若 v 为 nil,len(v) 即为零。
      字符串:v 中字节的数量。
      信道:信道缓存中队列(未读取)元素的数量;若 v 为 nil,len(v) 即为零。
案例演示:fmt.Println(len(stus))
func main() {
	  //使用for-range遍历map
	  cities := make(map[string]string)
	  cities["no1"] = "北京"
	  cities["no2"] = "天津"
	  cities["no3"] = "上海"
fmt.Println("cities 有", len(cities), "对 key-value")
	  //使用for-range遍历一个结构比较复杂的map
	  studentMap := make(map[string]map[string]string, 10)
	  studentMap["stu01"] = make(map[string]string, 3)
	  studentMap["stu01"]["name"] = "tom"
	  studentMap["stu01"]["sex"] = "男"
	  studentMap["stu01"]["address"] = "北京长安街"
	  studentMap["stu02"] = make(map[string]string, 3) //这句话不能少
	  studentMap["stu02"]["name"] = "mary"
	  studentMap["stu02"]["sex"] = "女"
	  studentMap["stu02"]["address"] = "北京东沙村"
fmt.Println("studentMap 有", len(studentMap), "对 key-value")
}

 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号