Go语言中的键值对(key->value)集合,称之为映射map。映射map是变长类型,定义时不需要指定长度。映射map是无序的,遍历是的顺序不可期,原因是底层由hash表实现。
逻辑结构表示为:
var m = map[key_type]value_type{key1: value1, key2: value2}
var m = make(map[key_type]value_type)
// 示例,字符串型下标,字符串型值:
var m = make(map[string]string) //make()会分配内存空间,初始化。
m["east"] = "东"
m["west"] = "西"
// 直接初始化
var m = map[string]string{"east": "东", "west": "西"}
与数组类型,使用下标完成映射元素的访问。
var m = map[string]string{"east": "东", "west": "西"}
fmt.Println(m["east"])
// 东
fmt.Println(m["west"])
// 西
for k, v := range mapVar {
fmt.Println(k, v)
}
遍历的顺序不可期。
切片为引用类型,因此切片的默认初始值为nil。
同时复制时为引用传递,修改会相互影响。
通过key获取元素时,使用第二个变量,可以接收到当前key是否存在的布尔值。
var m = map[string]string{"east": "东", "west": "西"}
value, exists := m["south"]
// value: 东, exists: true
value, exists := m["south"]
// value: , exists: false
delete(map, key),删除 map 中,指定的 key。如果 key 不存在,该操作不会产生错误。
var m = map[string]string{"east": "东", "west": "西"}
delete(m, "west")
fmt.Println(m)
// map[east:东]
如果 map 的值类型可以作为 key 且所有的 value 是唯一的,那么通过下面的方法可以做到键值对调:
var m = map[string]string{"east": "东", "west": "西"}
for k, v := range m {
m[v] = k
}
完!
原文出自:小韩说课
微信关注:小韩说课
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。