【Go】Map使用

1 map的基本使用

package main

import (
	"fmt"
	"sort"
)

/*
map 是 Go中的内置数据类型,
- key-value形式,无序(集合),不可通过索引获取,
- 长度不定
- 引用类型
- 内置len函数可获取map中key-value的个数
*/
func main() {
	// 1. 创建map
	var map1 map[int]string         // 创建方式1,var 变量名 map[键类型]值类型, 默认为nil(即为空)
	var map2 = make(map[int]string) // 创建方式2,make函数创建make(map[键类型]值类型)
	// 直接添加值
	var map3 = map[string]int{"Go": 100, "Python": 98, "Java": 97}

	fmt.Println(map1)
	fmt.Println(map2)
	fmt.Println(map3)
	// 补充:如果不初始化map,默认创建一个nil map,且不能用来存放key-value
	// 2. 判断一个map是否为nil map
	fmt.Println(map1 == nil)
	fmt.Println(map2 == nil)
	fmt.Println(map3 == nil)
	// 初始化map1
	if map1 == nil {
		map1 = make(map[int]string)
	}
	// 3.存储键值对 map[key]=value
	map1[1] = "hello"
	map1[2] = "么么哒"
	// 4.根据键获取值
	fmt.Println(map1)
	fmt.Println("map1[1]:", map1[1])
	// 当获取map中不存的值时,回返回一个空值(对应数据类型的空值)
	// 如果key对应的值正好是空值,需要通过如下方式查看
	value, ok := map1[3] // ok 返回map中是否存在该键
	if ok {
		fmt.Println("对应的数值是:", value)
	} else {
		fmt.Println("key不存在,获取的是默认值", value)
	}
	// 5.修改值
	fmt.Println(map1)
	map1[1] = "哈喽"
	fmt.Println(map1)
	// 6.删除数据,使用内建函数delete
	delete(map1, 1) // 参数1为map变量名称,参数2为要删除的key
	// 如果key不存在对整个map无影响
	fmt.Println(map1)
	// 7.map的长度,使用内建函数len
	fmt.Println(len(map1))
	// 8.map的遍历,
	// 8.1 使用for range 无序遍历
	map1[3] = "value3"
	map1[4] = "value4"
	for k, v := range map1 {
		fmt.Println(k, v)
	}
	// 8.2 有序遍历
	/*
		获取所有的key,然后排序,再通过排序后的key获取值
	*/
	keys := make([]int, 0, len(map1)) // 创建切片,内容长度为0,最大长度为map1的长度
	fmt.Println(keys)
	for k, _ := range map1 {
		keys = append(keys, k)  // 为keys添加元素
	}
	fmt.Println(keys)
	// 使用sort包下的排序方法进行排序
	sort.Ints(keys)
	fmt.Println(keys)
	for _, key := range keys{
		fmt.Println(key, map1[key])
	}
	// 补充,字符串的排序
	s1:=[]string{"Apple","Python","Perl","Java","java","C","Go"}
	sort.Strings(s1)
	fmt.Println(s1)
	// 9 拓展 map和slice结合使用
	/*
	创建map用于存储人的信息,name, sex, age, address
	 */
	map4 := make(map[string]string)
	map4["name"] = "菊子皮"
	map4["age"]  = "26"
	map4["sex"]  = "男性"
	map4["address"] = "江苏南京"
	fmt.Println(map4)
	// 如果要存储多个人,需要再创建一个map
	map5 := make(map[string]string)
	map5["name"] = "菊小皮"
	map5["age"]  = "25"
	map5["sex"]  = "女性"
	map5["address"] = "江苏南京"
	fmt.Println(map5)
	// 将map存储到slice中
	s2:= make([]map[string]string,0, 2)
	s2 = append(s2, map4)
	s2 = append(s2, map5)
	for i, val:=range s2{
		fmt.Printf("第%d个人的信息是:\n",i + 1)
		fmt.Printf("\t姓名:%s\n", val["name"])
		fmt.Printf("\t年龄:%s\n", val["age"])
		fmt.Printf("\t性别:%s\n", val["sex"])
		fmt.Printf("\t地址:%s\n", val["address"])
	}
	// 补充,map是引用类型,map的值也还可以为map等其他值
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

皮皮AI记

好好学习,天天向上

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值