Go语言学习(六)map

map的引入

  1. 映射(map),Go语言中内置的一种类型,它将键值相关联,我们可以通过键key来获取
    对应的值value。类似其他语言的集合
  2. 基本语法 var map变量名 map[keytype] valuetype
    key、value的类型:bool、数字、string、指针、channnel、还可以是只包含前面几个类型的接口、结构体、数组
    key通常为int、string类型、value通通常为数字(整数、浮点数)、string、map、结构体
    slice、map、function不可以
package main
import "fmt"
func main() {
	//定义map变量
	var a map[int]string
	//只声明map内存是没有分配空间
	//必须通过make函数进行初始化,才会分配空间:
	a = make(map[int]string, 10) //map可以存放10个键值对
	//将键值对存入map中
	a[111] = "张三"
	a[112] = "李四"
	a[113] = "哇哈哈"
	//输出集合
	fmt.Println(a)

}

map的特点:

  1. map集合在使用前一定要make
  2. map的key-value是无序的
  3. key是不可以重复的,如果遇到重复,后一个value会替换前一个value
  4. value是可以重复的
  5. make函数的第二个函数size可以省略,默认就分配一个空间

map的三种创建方式

package main

import "fmt"

func main() {
	//方式1
	var a map[int]string
	//只声明map内存是没有分配空间
	//必须通过make函数进行初始化,才会分配空间:
	a = make(map[int]string, 10) //map可以存放10个键值对
	//将键值对存入map中
	a[111] = "张三"
	a[112] = "李四"
	a[113] = "哇哈哈"
	//输出集合
	fmt.Println(a)

	//方式2
	b := make(map[int]string)
	b[124] = "嘀嘀嘀"
	b[125] = "大法师"
	fmt.Println(b)

	//方式3
	c := map[int]string{
		126: "类似匿名",
		127: "高级",
	}
	c[128] = "张三"
	fmt.Println(c)
}

map的操作

  1. 增加和更新操作:
    map[“key”] = value ==> 如果key还没有,就是增加,如果key存在就是修改

  2. 删除操作:
    delete(map, “key”), delete是一个内置函数,如果key存在,就删除该key-value,
    如果k的v不存在,不操作,但是也不会报错在这里插入图片描述

  3. 清空操作:

    1. 如果我们要删除map的所有key,没有一个专门的方法一次删除,可以遍历一下key,逐个删除
    2. 或者map = make(…),make一个新的,让原来的成为垃圾,被gc回收
  4. 查找操作
    value, bol = map[key]
    value为返回的value,bool为是否返回,要么true要么false

package main
import "fmt"
func main() {
	//定义map
	b := make(map[int]string)
	//增加
	b[123] = "张三"
	b[256] = "李斯"
	//修改
	b[123] = "赵六"
	//删除
	delete(b, 123)
	delete(b, 233)
	fmt.Println(b)
	//查找
	value, flag := b[200]
	fmt.Println(value)
	fmt.Println(flag)
}
  1. 获取长度
  2. 遍历 for-range
package main
import "fmt"
func main() {
	b := make(map[int]string)
	//增加
	b[110] = "张三"
	b[120] = "李斯"
	b[130] = "你好评"
	//获取长度
	fmt.Println(len(b))

	//遍历:
	for k, v := range b {
		fmt.Printf("key为:%v value为%v \t", k, v)
	}
	fmt.Println("------------------------")
	//加深难度
	a := make(map[string]map[int]string)
	a["班级1"] = make(map[int]string, 3)
	a["班级1"][12] = "张三"
	a["班级1"][13] = "菲菲"
	a["班级1"][15] = "haha"

	a["班级2"] = make(map[int]string, 3)
	a["班级2"][122] = "雄安"
	a["班级2"][133] = "发发"
	a["班级2"][154] = "阿发"

	for k1, v1 := range a {
		fmt.Println(k1)
		for k2, v2 := range v1 {
			fmt.Printf("学生学号为:%v 学生姓名为%v \t", k2, v2)
		}
		fmt.Println()
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值