map数据类型
map
Map 是一种无序的键值对的集合。
- 无序 :map[key],不可能使用 map[0] map[1]1去取出数据
- 键值对:key - value /key - value key - value key - value
Map 最重要的一点是通过 key 来快速检索数据,key 类似于索引,指向数据的值。
Map 是一种集合,所以我们可以像迭代数组和切片那样迭代它。
不过,Map 是无序的,我们无法决定它的返回顺序。
Map也是引用类型
【1】、map的定义
package main
import (
"fmt"
)
func main() {
// map集合,保存数据的一种结构
// 创建一个map map[key]value,定义后默认是空的
var map1 map[int]string
if map1 == nil {
fmt.Println("map1==null")
}
// 更多的时候时使用make方法去创建
var map2 = make(map[string]string)
fmt.Println(map2)
// 在创建的时候,添加一些数据 map[string]int{"key":"value"}
var map3 = map[string]int{"C": 100, "Go": 10, "java": 60}
fmt.Println(map3)
fmt.Printf("%T\n", map3)
}
【2】、map的使用
- 创建并初始化map
- map[key] = value 。将vaule赋值给对应的map的key
- 判断key是否存在,value, ok = map[key]
- 删除map中的元素, delete(map,key)
- 新增 map[key] = value
- 修改 map[key] = value ,如果存在这个key就是修改。
- 查看map的大小, len(map)
package main
import (
"fmt"
)
func main() {
// map定义
var map1 map[string]int
// map1初始化
map1 = make(map[string]int)
// 在map中,如果key重复了,那么后面的key就会覆盖前面的key
map1["C"] = 100
map1["Go"] = 100
map1["Java"] = 200
fmt.Println(map1)
fmt.Println(map1["C"])
// 在map中没有index的概念,因此我们需要判断key是否存在
// map中的判断,ok-idiom 是否存在 是一个bool值
value, ok := map1["C"]
if ok {
fmt.Println("map中key存在,value", value)
} else {
fmt.Println("map中key不存在")
}
// 修改数据
map1["C"] = 300
fmt.Println(map1)
// 如果key存在 那就是直接修改,如果key不存在就是新增的过程
map1["C++"] = 400
fmt.Println(map1)
// 删除数据,delete方法
delete(map1, "C")
fmt.Println(map1)
fmt.Println(len(map1)) // 有几个key len就是多少
}
【3】、map遍历
for k, v := range map1 , key-value,每次打印可能是无序的。
package main
import "fmt"
/*
遍历map
- key、value 无序的,遍历map,可能每次的结果排序都不一致。
- "aaa" "aaaaa"
- "bbb" "bbbbb"
- "ccc" "ccccc"
1、map是无序的,每次打印出来的map可能都不一样,它不能通过index获取,只能通过key来获取
2、map的长度是不固定的,是引用类型的
3、len可以用于map查看map中数据的数量,但是cap无法使用
4、map的key 可以是 布尔类型,整数,浮点数,字符串
*/
func main() {
var map1 = map[string]int{"C": 100, "java": 200, "Go": 300}
for k, v := range map1 {
fmt.Println(k, v)
}
}
【4】、map结合slice使用
package main
import "fmt"
func main() {
// map 结合 slice 来使用
/*
需求:
1、创建map来存储人的信息,name,age,sex,addr
2、每个map保存一个的信息
3、将这些map存入到切片中
4、打印这些数据
*/
user1 := make(map[string]string)
user1["name"] = "tom"
user1["age"] = "14"
user1["addr"] = "tianjin"
user2 := make(map[string]string)
user2["name"] = "jim"
user2["age"] = "16"
user2["addr"] = "shanghai"
user3 := map[string]string{"name": "jerry", "age": "55", "addr": "hangzhou"}
fmt.Println(user3)
userDate := make([]map[string]string, 0, 3)
userDate = append(userDate, user1, user2, user3)
fmt.Println(userDate)
for _, v := range userDate {
fmt.Println(v["name"])
}
}
// 通过map和slice 写一个简单的图书数据库,并可以通过书名或者书号来查询书的位置
package main
import "fmt"
func main() {
map1 := make(map[string]any)
map1["name"] = "haha"
map1["num"] = "1212"
map1["addr"] = "1-1-3232"
map2 := make(map[string]any)
map2["name"] = "xixi"
map2["num"] = "456"
map2["addr"] = "1-2-5252"
map3 := make(map[string]any)
map3["name"] = "hehe"
map3["num"] = "44512"
map3["addr"] = "4-1-3232"
s1 := make([]map[string]any, 0, 10)
s1 = append(s1, map1, map2, map3)
fmt.Println(s1)
var name string
fmt.Println("请输入书名")
fmt.Scan(&name)
for _, books := range s1 {
if name == books["name"] {
fmt.Println(books["addr"])
}
}
}
本文来自博客园,作者:Linux小菜鸟,转载请注明原文链接:https://www.cnblogs.com/xuruizhao/p/18544835