Golang Map

Golang map学习

Go语言中,map是散列表的引用,map的类型是map[K]V,类似我们C++unordered_map

声明和初始化

// 给定名字得到年龄
ages := make(map[string]int) 
// 创建并初始化(可以设置我们想要的值)
ages := map[string]int{
    "alice":   31,
    "charlie": 34,
}

不指定任何键值对,得到一个空map

ages := map[string]int{}

创建一个nilmap

var ages map[string]int

这只是声明了一个map[string]int类型的ages,我们没有分配内存,这样我们是不能操作存储键值对的,必须要初始化后才可以,比如使用make函数,为其开启一块可以存储数据的内存,也就是初始化。

实例代码

package main

import "fmt"

func main() {

	// 初始化
	ages := map[string]int{
		"alice":   31,
		"charlie": 34,
	}
	fmt.Println(ages)    // map[alice:31 charlie:34]
	ages["alice"] = 30   // 更改映射关系
	ages["charlie"] = 30 // 更改映射关系
	fmt.Println(ages)    // map[alice:30 charlie:30]

	// 使用内置函数delete移除元素
	delete(ages, "alice")
	fmt.Println(ages)    // map[charlie:30] 

}

遍历map

package main

import "fmt"

func main() {
	// 初始化
	ages := map[string]int{
		"alice":   31,
		"charlie": 34,
	}

    // 遍历散列表(得到两个返回值 key value)
	for name, age := range ages {
		fmt.Printf("%s\t%d\n", name, age)
	}
	// 忽略年龄
	for name, _ := range ages {
		fmt.Printf("%s\n", name)
	}
}
alice   31
charlie 34
alice  
charlie

map是引用类型的

查看如下代码

package main

import "fmt"

func resetMap(m map[string]int) {
	m["上一周"] = 0
}

func main() {
	m := map[string]int{
		"上一周": 18,
		"下一周": 20,
	}
	fmt.Println(m)

	// 更改
	resetMap(m)

	fmt.Println(m)

}
map[上一周:18 下一周:20]
map[上一周:0 下一周:20]

我们创建了一个函数resetMap并在其中更改map的键值对,我们发现外部也发生了更改。这说明,map在函数间传递并不是拷贝了一个副本的,在函数间改变也会影响函数外的map

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值