map-golang复习
定义
先骂一句
fucking you 🐛🏊
得到消息好像又可以了,那就不fuck了
大概三种方式定义
func main() {
m1 := map[string]string{
"name": "wh",
"city": "sgp",
} //map[city:sgp name:wh]
m2 := make(map[string]int) //map[]
var m3 map[string]int //map[]
fmt.Println(m1, m2, m3)
}
遍历
func main() {
m1 := map[string]string{
"name": "wh",
"city": "sgp",
} //map[city:sgp name:wh]
for k, v := range m1 {
fmt.Println(k, v)
}
}
得到结果
name wh
city sgp
⚠️ key在map里面无序,也就是输出还可以下面这样,如果需要排序就需要手动对key排序(slice),然后也可以这样(slice的len)来获取元素个数。
city sgp
name wh
如果不需要的参数 k,v
可以_
替代
获取map的值
func main() {
m1 := map[string]string{
"name": "wh",
"city": "sgp",
} //map[city:sgp name:wh]
fmt.Println(m1["name"]) //wh
}
就 m1["name"]
这样
如果打错了 m1["nama"]
会输出
空的
判断值是否存在
func main() {
m1 := map[string]string{
"name": "wh",
"city": "sgp",
} //map[city:sgp name:wh]
_, nameok := m1["name"]
fmt.Println(nameok) //true
_, namaok := m1["nama"]
fmt.Println(namaok) //false
}
类似 _, nameok := m1["name"]
其中_
的位置表示取得的值(这里_表示我不要),nameok
表示name
段是否存在
实际可以这么用嘛
m1 := map[string]string{
"name": "wh",
"city": "sgp",
} //map[city:sgp name:wh]
if name,ok := m1["name"];ok{
fmt.Println(name)
}else {
fmt.Println("空值")
}
有值就打印,没有就打印“空值”
删除值
func main() {
m1 := map[string]string{
"name": "wh",
"city": "sgp",
} //map[city:sgp name:wh]
fmt.Println(m1) //map[city:sgp name:wh]
delete(m1, "name")
fmt.Println(m1) //map[city:sgp]
}
就是 delete(m1, "name")
用 delete
第一个参数是 map名 第二个是 字段名
map的key
map使用哈希表,可以比较相等
除了slice
,map
,function
的内建类型都可以作为key(通常也不会这样乱搞)
struct类型不包含上述字段也可以作为key