Loading

Golang map

map

  • 类似其他语言中的哈希表或者字典,以key-value形式存储数据
  • key必须是支持==或!=比较运算的类型,不可以是函数、map或slice
  • map查找比线性搜索快很多,但比使用索引访问数据的类型慢100倍
  • map使用make()创建,支持:=这种简写方式
package main

import (
	"fmt"
)

func main() {
	var m map[int]string //使用var关键字,[key类型]value类型
	m = map[int]string{}   //初始化这个map
	//m = make(map[int]string)
	m2 := make(map[int]string)  //这样都是实现map的简单初始化的方法
	fmt.Println(m)
	fmt.Println(m2)
}
package main

import (
	"fmt"
)

func main() {
	m2 := make(map[int]string)
	m2[1] = "ok"
	fmt.Println(m2)
	delete(m2, 1) //删除一个键值对
	a := m2[1]    //取出key为1的值
	fmt.Println(a)
}
package main

import (
	"fmt"
)

func main() {
	var m map[int]map[int]string
	m = make(map[int]map[int]string) //对m进行初始化
	m[1] = make(map[int]string)      //此时对key为1的map进行初始化
	m[1][1] = "ok"                   //对key为1的map中的key为1的string进行赋值为ok
	a := m[1][1]                     //取值
	fmt.Println(a)
}

package main

import (
	"fmt"
)

func main() {
	var m map[int]map[int]string
	m = make(map[int]map[int]string) //对m进行初始化
	a, ok := m[2][1]                 //此时没有对key为2的map进行初始化,所以ok的返回值是false,a的值为空
	fmt.Println(a, ok)
	if !ok {
		m[2] = make(map[int]string)

	}
	m[2][1] = "hello"
	a, ok = m[2][1]
	fmt.Println(a, ok)
}
  • make([keyType]value Type, cap),cap表示容量,可省略
  • 超出容量时会自动扩容,但尽量提供一个合理的初始值
  • 使用len()获取元素个数
package main

import (
	"fmt"
)

func main() {
	// for i,v :range slice{}  i对应的是slice的索引,v对应的是slice索引相对应的值这里对v的所有操作都不会影响这个slice
	//这个时候需要用slice[i]来改变v的值
	//for k,v :range map{} 此时k对应的是map中的key,v对应的是map中的value值,此时对k和v的操作都是对值得拷贝的操作,也需要map[k]来修改v的值
	sm := make([]map[int]string, 5) //创建一个长度为5的map型的slice
	for i, _ := range sm {
		sm[i] = make(map[int]string, 1) //初始化sm当中的map
		sm[i][10] = "ok"
		fmt.Println(sm[i])
	}
	fmt.Println(sm)

}

  • 键值对不存在时自动添加,使用delete()删除某键值对
  • 使用for range 对map和slice进行迭代操作
package main

import (
	"fmt"
	"sort"
)

func main() {
	m := map[int]string{1: "a", 2: "b", 3: "c", 4: "d", 5: "e"}
	s := make([]int, len(m))
	i := 0
	for k, _ := range m {
		s[i] = k
		i++
	}
	sort.Ints(s) //对map当中的k进行排序,这就是对map的间接排序
	fmt.Println(s)

}
package main

import (
	"fmt"
)

func main() {
	m1 := map[int]string{1: "a", 2: "b", 3: "c"}
	m2 := make(map[string]int)
	fmt.Println(m2)
	for k, v := range m1 {
		m2[v] = k
	}
	fmt.Println(m2)
}

posted @ 2017-10-11 20:18  Devops、小铁匠  阅读(417)  评论(0编辑  收藏  举报