Go map

引用类型 一定要初始化 才可以使用

//map是引用类型 
func map1() {
	//声明一个map
	var a map[string]int  //nil
	fmt.Println(a == nil) //true

	//map的初始化
	b := make(map[string]int, 5)
	fmt.Println(b == nil) //false

	//map 如何添加键值对
	b["age"] = 100
	b["age1"] = 200
	fmt.Println(b)         //map[age:100 age1:200]
	fmt.Printf("%T\n", b)  //map[string]int
	fmt.Printf("%#v\n", b) //map[string]int{"age":100, "age1":200}

	//声明 & 初始化
	c := map[int]bool{
		1: true,
		2: false,
	}
	fmt.Println(c)         //map[1:true 2:false]
	fmt.Printf("%#v\n", c) //map[int]bool{1:true, 2:false}

	//var d map[int]int
	//d[100] = 100 //报错 因为没有初始化所以没有内存地址,所以不可以赋值

	//判断某个键存在不?
	var scoreMap = make(map[string]int, 8)
	scoreMap["王二狗"] = 100
	scoreMap["铁蛋"] = 80
	// scoreMap["吴亦凡"] = 80

	value, ok := scoreMap["吴亦凡"] //ok bool,value 值
	if ok {
		fmt.Println("吴亦凡 存在 scoreMap中 分数是", value)
	} else {
		fmt.Println("查无此人")
	}

	//遍历
	for key, value := range scoreMap {
		fmt.Println("姓名:", key, "分数:", value)
	}

	//仅仅遍历key
	for key := range scoreMap {
		fmt.Println("姓名:", key)
	}

	//仅仅遍历value
	for _, value := range scoreMap {
		fmt.Println("分数:", value)
	}

	//删除 键值对
	delete(scoreMap, "王二狗")
	fmt.Println(scoreMap) //map[铁蛋:80]

	//按照某个固定顺序遍历map
	var studentMap = make(map[string]int, 100)
	for i := 0; i < 50; i++ {
		key := fmt.Sprintf("stu%02d", i)
		value := rand.Intn(100)
		studentMap[key] = value
	}

	for key, value := range studentMap {
		fmt.Println(key, value)
	}

	keys := make([]string, 0, 100)

	for key, _ := range studentMap {
		// fmt.Println((key))
		keys = append(keys, key)
	}
	sort.Strings(keys)

	for _, k := range keys {
		fmt.Println("排序后key:", k, "排序后value:", studentMap[k])
	}

	//元素类型为map的切片 引用类型 一定要初始化 才可以使用
	mapSlice := make([]map[string]int, 8, 8)
	fmt.Println(mapSlice[0] == nil) //true 因为没有初始化 map
	mapSlice[0] = make(map[string]int, 8)
	mapSlice[0]["kobe"] = 100
	fmt.Println(mapSlice) //[map[kobe:100] map[] map[] map[] map[] map[] map[] map[]]

	//值为切片的map
	sliceMap := make(map[string][]int, 8) //只 完成了 map的初始化
	v, ok := sliceMap["中国"]
	if ok {
		fmt.Println(v)
	} else {
		sliceMap["中国"] = make([]int, 8) //初始化 切片
		sliceMap["中国"][0] = 100
		sliceMap["中国"][1] = 200
		sliceMap["中国"][2] = 300
	}
	for k, v := range sliceMap {
		fmt.Println(k, v)
	}

	//统计一个字符串每个单词出现的次数 how do you do?
	var s = "how do you do"
	words := strings.Split(s, " ")
	wordMap := make(map[string]int, 10)

	for _, word := range words {

		value, ok := wordMap[word]
		if ok {
			wordMap[word] = value + 1
		} else {
			wordMap[word] = 1
		}
	}
	fmt.Println(wordMap)
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值