Golang Map 类型

[TOC]

1. 基本用法

golang的map类型与python中的dict类型相似,是一个键值-值的对的集合。该类型是一个引用类型,不是按值传递,所以一个变量可以作为另一个map对象的引用。基本的map类型声明,可以使用以下形式

var testMap map[string]int   // nil map,只是变量声明
test := map[string]int{}     // not nil, 相当于使用了make函数
test := make(map[string]int)
test := map[string]int {
    "First": 1,
    "Second": 2,
}
test["Third"] = 3

对于一个map类型的变量,如果只是使用var进行声明便是一个nil 空集,如果使用短命名方式,实际上是初始化了一个map类型,相当于调用了make函数,此时不是一个空集。虽然map的长度为0但是不是空

添加元素

可以直接使用数组式赋值的方式进行元素添加,也可以在初始化时即将元素添加到map中去

遍历元素

可以使用range函数进行map遍历,获取key, value

func equal(a, b map[string]int) bool {
  if len(a) == len(b) {
    for key, value := range a {
      got, ok := b[key]
      if ok {
        if got != value {
          return false
        }
      } else {
        return false
      }
    }
  } else {
    return false
  }

  return true
}

以上代码用于检验两个map是否相等,不可以直接用==操作符,因为map不是基本类型。需要遍历每一个元素,确定每个元素的键值value都相同后才可判断map相等

确定一个元素是否在map中

value, ok = map[key]  
// 如果该键值对应的元素在mao中,则返回为真,否则为假

删除元素

delete(map, key)

引用类型

package main

import (  
    "fmt"
)

func main() {  
    personSalary := map[string]int{
        "steve": 12000,
        "jamie": 15000,
    }
    personSalary["mike"] = 9000
    fmt.Println("Original person salary", personSalary)
    newPersonSalary := personSalary
    newPersonSalary["mike"] = 18000
    fmt.Println("Person salary changed", personSalary)

}

Last updated