map

map是key-value数据结构,是一种无序的键值对的集合

1、基本语法

var 变量名 map[keytype]valuetype

注意:slice,map还有function不可以作为key,因为这几个没法用==来判断

var a map[string]string
var b map[int]string
var c map[int]int
var d map[string]int
var e map[string]map[string]string

  

2、使用方式

2.1 先声明后赋值

func main() {
    var myMap map[string]string
    myMap = make(map[string]string, 2)
    myMap["name"] = "小明"
    myMap["age"] = "18"
    fmt.Printf("myMap=%v\n", myMap)
}

  

2.2 声明时直接make

func main() {
    myMap := make(map[string]string, 2)
    myMap["name"] = "小明"
    myMap["age"] = "18"
    fmt.Printf("myMap=%v\n", myMap)
}

  

2.3 声明时直接赋值

func main() {
    myMap := map[string]string{
	"name": "小明",
	"age":  "18",
    }
    fmt.Printf("myMap=%v\n", myMap)
}

  

3、map的增删改查

3.1 map[key] = value //如果key还没有就是增加,如果key存在就是修改。

3.2 删除,使用内置函数delete()

func delete(m map[Type]Type1, key Type)

如果key存在,就会删除该key-value,如果key不存在,不操作,但是也不会增加

func main() {
    myMap := map[string]string{
	"name": "小明",
	"age":  "18",
    }
    delete(myMap, "name")
    fmt.Printf("myMap=%v\n", myMap)
}

如果要删除map的所有key,没有一个专门的方法一次删除,可以遍历一下key,逐个删除

或者map = make(...),make一个新的map,让原来的称为垃圾,被gc回收

3.3 map查找

func main() {
    myMap := map[string]string{
	"name": "小明",
	"age":  "18",
    }
    value, ok := myMap["name"]
    if ok {
	fmt.Printf("myMap=%v\n", value)
    } else {
	fmt.Println("没找到")
    }
}

如果myMap这个map中存在"name",那么ok就会为true,否则为false 

 

4、map的遍历

使用for-range来遍历

func main() {
    myMap := map[string]string{
	"name": "小明",
	"age":  "18",
    }
    for key, value := range myMap {
	fmt.Printf("key=%v,value=%v\n", key, value)
    }
}

  

5、map切片

切片的类型如果是map,则我们称为slice of map,map切片,这样使用则map个数就可以动态变化了

func main() {
    mapSlice := make([]map[string]string, 2)
    mapSlice[0] = map[string]string{
	"name": "小明",
	"age":  "18",
    }
    mapSlice[1] = map[string]string{
	"name": "小红",
	"age":  "19",
    }
    newMap := map[string]string{
	"name": "小王",
	"age":  "20",
    }
    // 动态添加map
    mapSlice = append(mapSlice, newMap)
    fmt.Printf("mapSlice=%v\n", mapSlice)
}

  

6、map排序

golang中没有专门的方法针对map的key进行排序

golang中的map默认是无需的,也不是按照添加的顺序存放的,每次遍历,得到的输出可能不一样。

golang中的排序,是先对key进行排序,然后根据key遍历输出即可

func main() {
    var intMap map[int]int = make(map[int]int, 10)
    intMap[0] = 12
    intMap[8] = 15
    intMap[9] = 10
    intMap[7] = 23
    intMap[5] = 12
    intMap[6] = 50
    intMap[3] = 78
    intMap[1] = 10
    intMap[2] = 82
    intMap[4] = 30
    // 无序的
    fmt.Println("排序前················")
    for key, value := range intMap {
	fmt.Printf("key=%v,value=%v\n", key, value)
    }
    fmt.Println("排序前················")
    // 1.先将map的key放到切片中
    // 2.对切片进行排序
    // 3.遍历切片,然后按照key来输出map的值
    keySlice := make([]int, 10)
    for key, _ := range intMap {
	keySlice = append(keySlice, key)
    }
    sort.Ints(keySlice)
    fmt.Println("排序后················")
    for _, key := range keySlice {
	fmt.Printf("key=%v,value=%v\n", key, intMap[key])
    }
    fmt.Println("排序后················")
}

  

上一篇:QQ音乐源


下一篇:nginx-禁止ip访问或非法域名访问