-map

Map

  • key不存在时,获得value类型的初始值(不会报错)
  • 用 value, ok := m[key] 来判断是否存在key
  • map的遍历
    • map遍历不保证遍历顺序,如果需要顺序,需要手动对key排序(把所有key放到一个slice里然后用slice获取所有的值)
    • 使用len获取元素个数
  • map的key
    • map使用哈希表,必须可以比较相等
    • 除了slice map function的内建类型都可以作为key
    • Struct类型不包含上述字段(slice map function)也可以作为key
//建立map
 m := map[string]string{
     "name": "ccmouse",
     "course": "golang",
     "site": "imooc",
     "quality": "notbad",
 }

 //输出结果为 map[quality:notbad name:ccmouse course:golang site:imooc]

 //建立map第二种方法
m2 := make(map[string]int)  // m2 == empty map
 //建立map第三种方法
var m3 map[string]int    //m3 ==nil    go语言的nil是可以参与运算的

//m2 m3结果均输出结果为 map[]

//遍历map
// 可以省略v (for k := range m{}) 也可以省略k (for _,v := range m{})
for k,v :=range m{
    fmt.Println(k,v)
}

//结果为 name ccmouse
                         course golang
                          site    imooc
                            quality notbad

    courseName := m["course"]                     //输出为golang   
    caName := m["ca"]  //这个不存在的输出为空

    //判断map下标存不存在
    courseName, ok := m["course"]                   
    caName, ok := m["ca"]  

    fmt.Println(courseName, ok)
    fmt.Println(caName, ok)
    // 结果为 golang true
                                                        false

    if caName, ok := m["ca"]; ok {
        fmt.Println(caName)
    }       else {
        fmt.Println("key 不存在")
    }               
    // 输出结果为 key 不存在

    //删除元素
    name, ok := m["name"]
    fmt.Println(name, ok)
    delete(m, "name")
    name, ok = m["name"] //已经定义过了不能再定义所以 := 变成 =
    fmt.Println(name, ok)

    //输出结果为 ccmouse true
                                                                            false