返回顶部

map

Map类型

key-value的数据结构,又叫字典

声明
var map1 map[keytype]valuetype

例子:

var a map[string]string

var a map[string]int

注意:声明是不会分配内存的需要make初始化

初始化的两种方式:

var map[string]string = map[string][string]{"hello","world"}

或:

var a = make(map[string]string,10)

插入和更新
a["hello"] = "world"

查找
val,ok := a["hello"]  // 如果有值的话ok 为true 没有的话为nil val为一个空map

遍历
for k,v := range a{
fmt.println(k,v)
}

删除
delete(a,"hello")

这个操作是安全的,及时这个元素不存在也不会报错,如果一个查找失败将返回value类型对应的零值

长度
len(a)

map是引用类型

注意:map中的元素并不是一个变量,所以我们不能对map的元素进行取址操作

声明  map 的两种方式

package main

import "fmt"

func testMap() {
	//  方式 1
	var a map[string]string
	a = make(map[string]string,10)
	// 方式  2 
	//a := make(map[string]string, 10)
	a["abc"] = "efg"
	a["abc"] = "efg"
	a["abc1"] = "efg"

	fmt.Println(a)
}
func main() {
	testMap()

}

输出结果如下 

 嵌套map 

package main

import "fmt"
func testMap2() {

    a := make(map[string]map[string]string, 100)
    a["key1"] = make(map[string]string)
    a["key1"]["key2"] = "abc"
    a["key1"]["key3"] = "abc"
    a["key1"]["key4"] = "abc"
    a["key1"]["key5"] = "abc"
    fmt.Println(a)

}

func main() {
    testMap2()

 输出结果如下

 判断一个key是否在map中

 如果有值的话ok 为true 没有的话为nil val为一个空map

package main

import "fmt"
func modify(a map[string]map[string]string) {
    _, ok := a["zhangsan"]

    if !ok {
        a["zhangsan"] = make(map[string]string)
    }

    a["zhangsan"]["passwd"] = "123456"
    a["zhangsan"]["nickname"] = "pangpang"

    return
}
func testMap3() {

    a := make(map[string]map[string]string, 100)

    modify(a)

    fmt.Println(a)
}



func main() {
    testMap3()
}

输出结果如下

 

遍历嵌套map和删除map中的一个key

package main

import "fmt"

func trans(a map[string]map[string]string) {
    for k, v := range a {
        fmt.Println(k)
        for k1, v1 := range v {
            fmt.Println("\t", k1, v1)
        }
    }
}

func testMap4() {

    a := make(map[string]map[string]string, 100)
    a["key1"] = make(map[string]string)
    a["key1"]["key2"] = "abc"
    a["key1"]["key3"] = "abc"
    a["key1"]["key4"] = "abc"
    a["key1"]["key5"] = "abc"

    a["key2"] = make(map[string]string)
    a["key2"]["key2"] = "abc"
    a["key2"]["key3"] = "abc"

    trans(a)
    delete(a, "key1")
    fmt.Println()
    trans(a)

    fmt.Println(len(a))
}

func main() {

    testMap4()

}

输出结果如下

slice是map类型

package main

import "fmt"

func testMap5() {
    var a []map[string]int
    a = make([]map[string]int, 5)

    if a[0] == nil {
        a[0] = make(map[string]int)
    }
    a[0]["age"] = 26
    fmt.Println(a)
}

func main() {
    testMap5()
}

 输出结果如下

 map 排序

先获取所有key,把key进行排序,按照排序好的key,进行遍历

package main

import (
    "fmt"
    "sort"
)

func testMapSort() {
    var a map[int]int
    a = make(map[int]int, 5)

    a[8] = 10
    a[3] = 10
    a[2] = 10
    a[1] = 10
    a[18] = 10

    var keys []int
    for k, _ := range a {
        keys = append(keys, k)
        //fmt.Println(k, v)
    }


    sort.Ints(keys)

    for _, v := range keys {
        fmt.Println(v, a[v])
    }
}

func main() {
    testMapSort()
    //testMapSort1()
}

输出结果如下

 map 反转 就是 key 和 value 互换位置

声明另一个map存取互换后的即可

package main

import (
	"fmt"
	"sort"
)

func testMapSort1() {
	var a map[string]int
	var b map[int]string

	a = make(map[string]int, 5)
	b = make(map[int]string, 5)

	a["abc"] = 101
	a["efg"] = 10

	for k, v := range a {
		b[v] = k
	}

	fmt.Println(b)
}

func main() {
	testMapSort1()
}

 

输出结果如下

 

 

 

posted @ 2019-02-04 00:10  Crazymagic  阅读(265)  评论(0编辑  收藏  举报