Go语言 字典(map)
字典(map) 哈希表,key=>value,存储的key是经过哈希运算的 定义字典 定义一个学生信息字典。 示例如下: package main import "fmt" func main() { // 定义一个学生信息字典 // key是学生id =》 学生姓名 var idNames mapstring // 定义一个map,此时的map不能直接赋值的,它是空的 } 分配空间 使用map之前,一定要对map手动进行分配空间 若不分配空间直接使用,程序会抛出异常。 未分配空间直接赋值 示例如下: // 赋值 idNames = "张三" idNames = "李四" 抛出异常: panic: assignment to entry in nil map goroutine 1 : main.main() E:/gowork/src/字典.go:11 +0x2a 分配空间及赋值 对学生信息字典赋值前,增加分配空间操作。 示例如下: // 分配空间 idNames = make(mapstring, 10) // 赋值 idNames = "张三" idNames = "李四" 运行不在抛出异常。 分配空间但不指定长度 分配空间使用make,可以不指定长度,但是建议直接指定长度,性能会更好。 示例如下: idNames = make(mapstring) 定义时分配空间 也可以在定义时直接分配空间,防止定义后忘记分配空间导致抛出异常。 这种方式在日常使用中比较常见。 示例如下: idName1 := make(mapstring, 10) 遍历 对map进行遍历 示例如下: for key, val := range idNames { fmt.Println(key, "=>", val) } 判断key是否存在 访问不存在的key 如果判断一个key是否存在map中。 在map中不存在访问越界的问题,它认为所有的key都是有效的。 所以如果访问一个不存在的key并不会崩溃或者抛出异常, 只会返回这个类型的零值。 零值:bool => false, 数字 => 0,字符串 => 空 通过ok判断key是否存在 无法通过获取value来判断一个key是否存在, 因此我们需要一个能够校验key是否存在的方式 我们可以通过ok方式来进行判断。 如果key存在,那么value就是key对应的值,ok返回true;反之返回零值,ok返回false。 示例如下: value, ok := idNames if ok { fmt.Println("id=12这个key存在,value为:", value) } else { fmt.Println("id=12这个key不存在") } 删除元素 使用自由函数delete来删除map中指定key 删除存在和不存在的key 示例如下: fmt.Println("idNames删除前:", idNames) delete(idNames, 1) delete(idNames, 15) fmt.Println("idNames删除后:", idNames) 运行结果: idNames删除前: map idNames删除后: map 转自:https://blog.csdn.net/json_ligege/article/details/140488531
