GO语言MAP

╰+攻爆jí腚メ 2024-05-08 07:16 133阅读 0赞

Map初始化

  1. func TestInitMap(t *testing.T) {
  2. m1 := map[string]int{"a": 1, "b": 2, "c": 3}
  3. t.Log(m1["a"])
  4. t.Logf("m1 len=%d", len(m1))
  5. m2 := map[string]string{}
  6. //key不存在会赋默认值
  7. t.Log(m2["a"])
  8. t.Logf("m2 len=%d", len(m2))
  9. m3 := make(map[string]int, 10)
  10. m3["d"] = 1111
  11. t.Logf("m3 len=%d", len(m3))
  12. }

未初始化map不能赋值

  1. package main
  2. import "fmt"
  3. type Vertex struct {
  4. X int
  5. Y int
  6. }
  7. func main() {
  8. var Asset map[string] Vertex
  9. Asset["abc"] = vertex
  10. fmt.Println(Asset["abc"])
  11. }

编译时报错:panic: assignment to entry in nil map

正常的示例

  1. package main
  2. import "fmt"
  3. type Vertex struct {
  4. X int
  5. Y int
  6. }
  7. func main() {
  8. var Asset map[string] Vertex
  9. Asset = make(map[string] Vertex)
  10. Asset["abc"] = vertex
  11. fmt.Println(Asset["abc"])
  12. }

map的增删改查

  1. package main
  2. import "fmt"
  3. func main() {
  4. m := make(map[string]int)
  5. m["Answer"] = 42 //初始化
  6. fmt.Println("The value:", m["Answer"])
  7. m["Answer"] = 48 //修改值
  8. fmt.Println("The value:", m["Answer"])
  9. delete(m, "Answer") //删除值
  10. fmt.Println("The value:", m["Answer"])
  11. if m["Answer"] == 0 {
  12. fmt.Println("不存在的key") //不能存在的key的值为0
  13. }
  14. v, ok := m["Answer"] //通过双赋值检测某个键存在,如果 key 在 m 中, ok 为 true。否则, ok 为 false,并且 elem 是 map 的元素类型的零值。
  15. fmt.Println("The value:", v, "Present?", ok)
  16. }

map对于获取不存在的key的Value值时,不是nil,而是赋默认值。判断map中是否存在KEY的方法如下:

  1. func TestMapKey(t *testing.T) {
  2. m1 := map[string]int{"a": 1, "b": 2, "c": 3}
  3. if value, ok := m1["d"]; ok {
  4. t.Logf("Key 'a' value is %d", value)
  5. } else {
  6. t.Log("Key 'a' is not existing")
  7. }
  8. }

map实现工厂模式

  1. func TestFuncValue(t *testing.T) {
  2. mapf := map[string]func(op int) int{}
  3. mapf["a"] = func(op int) int { return op }
  4. mapf["b"] = func(op int) int { return op * op }
  5. mapf["c"] = func(op int) int { return op * op * op }
  6. t.Log(mapf["a"](2), mapf["b"](2), mapf["c"](2))
  7. }

发表评论

表情:
评论列表 (有 0 条评论,133人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Go语言学习、Map结构

    前面我们学习了Go语言中的数组,切片类型。但是我们发现使用数组或切片存储的数据量如果比较大,那么通过下标来取出某个具体数据的时候,相对来说比较麻烦。 我们在数组或是切片中取值

    相关 GO语言笔记--map

    1.说明 1)类似其他语言中的哈希表或者字典,以key-value形式存储数据 2)key必须是支持==或!=比较运算的类型,不可以是函数、map或slice 3)m