14 Go字典
2018-10-30 本文已影响0人
亨锅锅
1、why字典?
package main
import "fmt"
func main() {
/*
1.什么是字典?
和数组以及切片一样, 字典是用来保存一组相同类型的数据的
数组和切片可以通过索引获得对应元素的值
字典可以通过key获得对应元素的值
数组和切片的索引是系统自动从0开始递增生成的
字典的key必须我们自己指定
2.如何定义一个字典
格式: var 字典名称 map[key的数据类型]value的数据类型
3.如何给字典初始化
3.1通过语法糖来创建
3.2通过make(字典数据类型, 长度)
3.3.通过make(字典数据类型)
4.如何使用字典
和数组很像, 通过 字典变量名称[key名称]的方式来操作字典
5.注意点:
和切片一样, 没有初始化的字典是不能使用的
只要能够进行== !=判断的数据类型, 都可以作为字典的key
*/
// 1.创建字典的第一种方式
/*
// 1.定义一个字典变量
var dict map[int]int
// 2.通过语法糖来创建一个字典(初始化)
dict = map[int]int{0:1, 1:3, 2:5}
// 3.使用创建好的字典变量
fmt.Println(dict)
dict[0] = 666
fmt.Println(dict)
*/
// 2.创建字典的第二种方式
/*
// 1.定义一个字典变量
var dict map[int]int
// 2.通过make函数创建一个字典(初始化)
// 在企业开发中, 如果事先知道字典中需要保存多少条数据, 那么建议指定字典的长度
dict = make(map[int]int, 3)
// 3.使用创建好的字典变量
fmt.Println(dict)
dict[0] = 123
dict[1] = 456
dict[2] = 789
dict[3] = 999
fmt.Println(dict)
*/
// 3.创建字典的第三种方式
/*
// 1.定义一个字典变量
var dict map[int]int
// 2.通过make函数创建一个字典(初始化)
dict = make(map[int]int)
// 3.使用创建好的字典变量
fmt.Println(dict)
dict[0] = 123
dict[1] = 456
dict[2] = 789
dict[3] = 999
fmt.Println(dict)
*/
/*
var dict map[string]string = map[string]string{"name":"msh", "age":"18"}
fmt.Println(dict["name"])
fmt.Println(dict["age"])
*/
// 遍历字典
dict := map[string]string{"name":"msh", "age":"18"}
for key, value := range dict{
fmt.Println("key = ", key, "value = ", value)
}
}
2、字典的使用
package main
import "fmt"
func main() {
/*
1.增加
字典名称[key] = 值
如果字典中没有对应的key, 那么就是增加
2.修改
字典名称[key] = 值
如果字典中已经有对应的key, 那么就是修改
3.查询
value, ok = 字典名称[key]
如果有对应的key, 那么就会把key对应的值赋值给value, 并且ok等于true
如果没有对应的key, 那么value就等于零值, 并且ok等于false
4.删除
delete(字典变量, key)
会将指定字典中指定key的值删除
注意点:
字典中不能有同名的key
*/
/*
dict := map[string]string{}
fmt.Println(dict)
// 增加
dict["name"] = "msh"
fmt.Println(dict)
// 修改
dict["name"] = "zs"
fmt.Println(dict)
*/
/*
// 字典中不能有同名的key
//dict := map[string]string{"name":"msh", "name":"zs"}
//fmt.Println(dict)
dict := map[string]string{"name":"msh", "age":"18"}
//value, ok := dict["name"]
//fmt.Println(ok) // true
//fmt.Println(value) // msh
//
//value, ok := dict["gender"]
//fmt.Println(ok) // false
//fmt.Println(value) // ""
// 查询
// 企业开发判断字典中有没有某个key的标准写法
if value, ok := dict["name"]; ok{
fmt.Println(ok)
fmt.Println(value)
}
*/
// 删除
dict := map[string]string{"name":"lnj", "age":"18"}
fmt.Println(dict)
delete(dict, "age")
fmt.Println(dict)
}
3、字典作为函数参数
package main
import "fmt"
func main() {
/*
1.字典作为函数的参数
字典之间的赋值和切片之间的赋值一样, 是地址传递
所以字典作为函数的参数, 修改形参会影响到实参
2.注意点:
字典和数组以及切片不一样, 数组和切片保存的数据是有序的, 而字典保存的数据是无序的
*/
var dict1 map[string]string = map[string]string{"name": "lnj", "age": "18"}
//var dict2 map[string]string
//dict2 = dict1
fmt.Println(dict1)
//dict2["name"] = "zs"
change(dict1)
fmt.Println(dict1)
}
func change(dict2 map[string]string) {
dict2["name"] = "zs"
}