goLang map

goLang Map

是内置数据结构,无序
Go不提供set类型,但是map中key是不相同的,可以实现类似set功能

格式

map[keyType]valueType

map中键是唯一的,必须支持==和!=操作,所以 `切片、函数以及包含这些结构类型的具有引用语义的,不能作为映射的键,会造成编译错误

m := map[[] string]int{} // err,invalid map key type []string

map值可以是任意类型,没有限制。
map所有键的数据类型必须相同,值也是

map是无序的,无法决定返回顺序,所以,每次打印结果可能不同

创建

m4 := make(map[int]string, 10) // 第二个参数可以指定容量

和slice类似,map更方便一些,不用借助类似append的函数,直接赋值即可。如,m1[17] = “Nami”。
可以使用len()函数,不可以使用cap()函数

初始化

需要保证key不重复

var m1 map[int]string = map[int]string{1: "Luff", 2:"san"}
m2 := map[int]string{1: "Luff", 2:"san"}
fmt.Println(m2)

赋值

m1[1] = "Nami" // 修改
m1[3] = "Yuiki" // 追加

遍历

顺序是不确定的,每次遍历都不同

for k, v := range m1{
  fmt.Printlnf("%d --> %s\n", k, v)
}
for k := range m1{
  fmt.Printlnf("%d --> %s\n", k, v)
}

判断key是否存在

value, ok := m1[1]
fmt.Println("value = ", value, ", ok =", ok)

如果key存在,第一个返回值返回value的值。第二个返回值为 true。
如果key不存在,第一个返回值为空,第二个返回值为false

删除

使用delete()函数,指定key可以方便删除map的KV映射
delete操作是安全的,如果元素不在map中,将返回value类型对应的零值

Map做函数参数

在函数间传递映射不会制造出该映射的一个副本,不是值传递,是引用传递

func DeleteMap(m map[int[string, key int){
  delete(m, key)
  for k, v := range m{
    fmt.Printf("len(m)=%d, %d")
  }
}
func main() {
  m := map[int]string{1: "Luffy", 2: "san", 3: "Zoro"}
  DeleteMap(m, 2)
  for k, v := range m{
    fmt.Printf("len(m)=%d, %d --> %s \n", len(m), k, v)
  }
}

Map 做函数返回值

返回的是引用

func test() map[int]string {
  m1 := make(map[int]string, 1) // 容量为1的map
  m1[1] = "Luffy"
  m1[2] = "san"
  m1[67] = "Zoro"
  return m1  
}

喜欢你,始于初见,陷于陪伴,终于白首。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值