Go-映射

package ch4

/**
映射的内部实现和基础功能
映射是一个存储键值对的无序集合,实现使用了散列表。


*/

func main() {

	/*
		创建和初始化
		映射的键可以是任何值,只要这个值可以使用==运算符做比较。
		切片、函数以及包含切片的结构类型这些类型由于具有引用语义,
		不能作为映射的键。
	*/
	// 使用make声明映射
	// 创建一个映射,键的类型是string,值的类型是int
	dict := make(map[string]int)
	// 创建一个映射,键和值的类型都是string
	// 使用两个键值对初始化映射
	dict := map[string]string{"red": "#da1337", "orange": "#e95a22"}

	// 使用映射字面量声明空映射
	// 创建一个映射,使用字符串切片作为映射的键
	// []string是切片,不能作为映射的键,所以报错
	dict := map[[]string]int{}
	// 使用字符串切片作为值
	dict := map[int] []string{}


	/**
		使用映射

	*/
	// 为映射赋值
	// 创建一个空映射,用来存储颜色以及颜色对应的十六进制代码
	colors := map[string] string{}
	// 将red的代码加入到映射
	colors["red"] = "#da1337"

	// 对nil映射赋值时会报错
	// 通过声明映射创建一个nil映射
	var colors map[string] string
	// 将red的代码加入到映射,报错
	colors["red"] = "#da1377"

	// 从映射获取值并判断键是否存在
	// 获取blue对应的值
	value, exists := colors["blue"]
	if exists {
		fmt.Println(value)
	}

	// 从映射获取值,并通过该值判断键是否存在
	value := colors["blue"]
	// 通过判断这个值是不是零值
	if value != "" {
		fmt.Println(value)
	}

	// 使用range迭代映射
	// 创建一个映射,存储颜色和十六进制代码
	colors := map[string] string{
		"red": "#da1337", 
		"orange": "#e95a22",
		"darkgray": "#a9a9a9",
	}
	// 显示映射里的所有颜色
	for key, value := range colors {
		fmt.Printf("key: %s value: %s\n", key, value)
	}

	// 从映射中删除一项
	// 这种方法只能用在映射存储的值都是非零值的情况
	delete(colors, "red")

	
	/**
		在函数间传递映射
		在函数间传递映射并不会制造出该映射的一个副本。
		实际上,当传递映射给一个函数,并对这个映射做了修改时,
		所有对这个映射的引用都会察觉到这个修改。
	*/
	// 删除orange后,是直接对原来的映射进行操作的。
	delete(colors,"orange")


}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值