Go语言Map数据类型
文章目录
- Go语言Map数据类型
-
- 一、Map
-
- 1.1.1、map定义
- 1.1.2、map的基本使用
- 1.1.3、判断某个键是否存在
- 1.1.4、map的遍历
- 1.1.5、使用delete()函数删除键值对
- 1.1.6、按照指定顺序遍历map
- 1.1.7、元素为map类型的切片
- 1.1.8、值为切片类型的map
一、Map
- map是一种无序的基本key-value的数据结构,Go语言中的map是引用类型,必须初始化才能使用。
1.1.1、map定义
map[keytype]valuetype
keytype: 表示键的类型valuetype: 表示值的类型
- map类型的变量默认初始值为nil,需要使用make()来分配内存。
- 语法如下
make(map[keytype]valuetype, [cap])
- 其中cap表示map的容量,该参数虽然不是必须的,但是我们应该在初始化map的时候就为其执行一个合适的容量。
1.1.2、map的基本使用
- map中的数据都是成对出现的,map的基本使用示例代码如下:
func main() {scoreMap := make(map[string]int, 8)scoreMap[\"张三\"] = 90scoreMap[\"小明\"] = 100fmt.Println(scoreMap)fmt.Println(scoreMap[\"小明\"])fmt.Printf(\"tyoe of a:%T\\n\", scoreMap)}
map[小明:100 张三:90]100tyoe of a:map[string]int
func main() {userInfo := map[string]string{\"username\": \"admin\",\"password\": \"admin@123\",}fmt.Println(userInfo) fmt.Println(userInfo[\"username\"]) fmt.Println(userInfo[\"password\"]) }
1.1.3、判断某个键是否存在
- Go语言中有个判断map中键是否存在的特俗写法,格式如下:
value, ok := map[key]
func main() {userInfo := map[string]string{\"username\": \"admin\",\"password\": \"admin@123\",}v, ok := userInfo[\"username\"]if ok {fmt.Println(v)} else {fmt.Println(\"查无此人\")}}
1.1.4、map的遍历
func main() {scoremap := make(map[string]int)scoremap[\"张三\"] = 90scoremap[\"小明\"] = 100scoremap[\"王五\"] = 60for k, v := range scoremap {fmt.Printf(\"key: %s value: %d\\n\", k, v)}}
func main() {scoremap := make(map[string]int)scoremap[\"张三\"] = 90scoremap[\"小明\"] = 100scoremap[\"王五\"] = 60for k := range scoremap {fmt.Printf(k)}}
- 注意:遍历map时的元素顺序与添加键值对的顺序毫无关系
1.1.5、使用delete()函数删除键值对
- 使用delete()内建函数从map中删除一组键值对,delete()函数的格式如下:
delete(map, key)
map: 表示要删除键值对的mapkey: 表示要删除的键值对的key
func main() {scoremap := make(map[string]int)scoremap[\"张三\"] = 90scoremap[\"小明\"] = 100scoremap[\"王五\"] = 60delete(scoremap, \"小明\")for k, v := range scoremap {fmt.Printf(k, v)}}
1.1.6、按照指定顺序遍历map
func main() {rand.Seed(time.Now().UnixNano()) var scoreMap = make(map[string]int, 200)for i := 0; i < 100; i++ {key := fmt.Sprintf(\"stu%02d\", i) value := rand.Intn(100) scoreMap[key] = value}var keys = make([]string, 0, 200)for key := range scoreMap {keys = append(keys, key)}sort.Strings(keys)for _, key := range keys {fmt.Println(key, scoreMap[key])}}
1.1.7、元素为map类型的切片
func main() {var mapSlice = make([]map[string]string, 3)for index, value := range mapSlice {fmt.Printf(\"index: %d value: %v\\n\", index, value)}fmt.Println(\"init data\")mapSlice[0] = make(map[string]string, 10)mapSlice[0][\"name\"] = \"王五\"mapSlice[0][\"password\"] = \"123456\"mapSlice[0][\"address\"] = \"红旗大街\"for index, value := range mapSlice {fmt.Printf(\"index: %d value: %v\\n\", index, value)}}
1.1.8、值为切片类型的map
func main() {var sliceMap = make(map[string][]string, 3)fmt.Println(sliceMap)fmt.Println(\"init data\")key := \"中国\"value, ok := sliceMap[key]if !ok {value = make([]string, 0, 2)}value = append(value, \"北京\", \"上海\")sliceMap[key] = valuefmt.Println(sliceMap)}